我正在使用
mysqli_ping()
检查 mysqli 连接是否已启动。在最新的 PHP 8.4 版本中,该函数已被弃用,并将在将来删除。为什么这个函数被弃用了,我可以用什么来代替它,我一开始就错误地使用了它?
你可以用这样简单的东西替换:
try {
$mysqli->query('DO 1');
} catch (mysqli_sql_exception) {
// Establish new connection
}
但你可能不应该!
此函数从来不是为了检查连接是否处于活动状态。请注意,如果连接断开,它会引发错误。其目的是在使用 libmysql 编译 PHP 时自动重新连接。这不再可能了。从 PHP 8.2 开始,该函数在连接断开时会抛出错误,就像任何其他 mysqli 函数一样。自动重新连接是一个糟糕的想法,这就是为什么它从未在 mysqlnd 中实现。由于
mysqli_ping()
无法再执行其核心任务,因此已弃用并将在将来删除。
无意冒犯任何开发人员,但如果你这样做,你就已经做错了:
try {
$mysqli->ping();
} catch (mysqli_sql_exception) {
// Establish new connection
}
上面的代码导致以下两件事之一:
如果 1 为 true 那么为什么不直接销毁旧对象并创建新连接呢?
如果 2 为真,那么您将因为很少发生的事情而遭受严重的性能损失。 MySQL 连接很少断开。如果你的经常掉线,那么你需要调试并修复可能的根本原因。是 MySQL 服务器超时、网络问题还是其他原因?与其使用 try-catch,不如让代码出错并让 PHP 记录错误消息,以便您可以调查问题。
可能永远不需要检查 mysqli 连接是否处于活动状态。毕竟,PDO 没有方法可以做到这一点,而且它是连接数据库的首选扩展。