这几天我收到了max_user_connections
错误。 我想知道我是否做错了什么。
我有一个带有 mysqli 连接脚本的config.php
文件:
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
所以我需要在 mysqli 中获取一些东西的页面我包括 config.php。 下面是一个例子:
示例.php
<?php
include_once("config.php");
$stmt = $mysqli->prepare("select...");
$stmt->execute();
$stmt->bind_result(...,...);
while($stmt->fetch()) {
...
}
$stmt->close();
?>
some html <p> <img>...
<?php
$stmt = $mysqli->prepare("select...");
$stmt->execute();
$stmt->bind_result(...,...);
while($stmt->fetch()) {
...
}
$stmt->close();
?>
some html <p> <img>...
<?php
$stmt = $mysqli->prepare("select...");
$stmt->execute();
$stmt->bind_result(...,...);
while($stmt->fetch()) {
...
}
$stmt->close();
?>
所以,我的问题是:像这样做选择是最好的做法吗? 我应该在每次选择后关闭 Mysqli 连接并再次打开吗? 还是在顶部一起选择而不分开,而不是中间有一些 html?
像这样选择的最佳做法是什么?
我讨厌人们使用"最佳实践"一词,这通常是一个很好的指标,他们不知道他们在说什么。
您的方法的优点是它既漂亮又简单。但正如您发现的那样,它不能很好地扩展。
在实践中,它很难测量,但在大多数应用程序中,MySQL连接在脚本生命周期的大部分时间里都没有使用。因此,延迟连接打开并尽快关闭通常会取得巨大胜利。
前者可以通过装饰 mysqli 类来完成,connect 方法只存储凭据,而任何需要与数据库通信的东西都应该在需要访问数据库时调用包装的连接方法。然而,通常这种方法的效仿程度很低,除非你的代码创建了大量从未使用的数据库连接(在这种情况下,更便宜的解决方案是增加连接限制)。
在运行最后一个查询后,可能需要很长时间才能关闭连接。显式关闭连接可以解决此问题,但需要大量代码更改。
不要为每个查询打开和关闭连接。虽然这将导致与数据库的连接数量减少,但性能会很糟糕
最大的优势通常来自优化查询 - 降低并发性和更好的用户体验。