我对网络编程很陌生,我还编写了一些web,以使用户能够在设备之间同步他们的数据。
使用单例模式to可以防止在每个MySQL调用中重新连接吗?
ping())
{
$connection = new mysqli("localhost", "id", "password", "database");
}
return $connection;
}
public function execute(string $sql, iterable $params) : void
{
if ($statement = $connection->prepare($sql))
{
foreach ($params in $param)
{
if (is_int($param))
{
$statement->bind_param("i", $param);
}
else if (is_double($param))
{
$statement->bind_param("d", $param);
}
else if (is_string($param))
{
$statement->bind_param("s", $param);
}
}
$statement->execute();
$statement->close();
}
}
public function getResult(string $sql, iterable $params) : mysqli_result
{
if ($statement = $connection->prepare($sql))
{
foreach ($params in $param)
{
if (is_int($param))
{
$statement->bind_param("i", $param);
}
else if (is_double($param))
{
$statement->bind_param("d", $param);
}
else if (is_string($param))
{
$statement->bind_param("s", $param);
}
}
$statement->execute();
$result = $statement->get_result();
$statement->close();
return $result;
}
}
}
// example
MySQLiConnection::getInstance()->execute("SELECT * FROM users WHERE forename = ? AND surname = ?", "ben", "dover");
?>发布于 2019-01-24 12:24:26
首先,在你的房子里。
error_reporting设置为E_ALL,则PHP将指示您每次调用getInstance()时都试图使用不存在的变量$connection。当然,你想把它叫做$this->connection。现在是密码。
意图是非常好的,特别是我喜欢getResult()和execute()方法,它们允许您避免绑定param的麻烦。然而,显然有一个重复的代码。为什么不让执行返回$statement?它将使getResult()变得像
public function getResult(string $sql, iterable $params) : mysqli_result
{
return $this->execute($sql, $params)->get_result();
}最后。我刚刚注意到,在评审过程的一半,您的代码偏离了主题,因为它根本无法工作。Mysqli不是PDO,您不能在循环中绑定参数。所以你得重新装修一下。为了提供帮助,以下是我的两篇文章:
https://codereview.stackexchange.com/questions/212136
复制相似问题