mysqli_ping 已弃用。我应该用什么来代替它?

问题描述 投票:0回答:1

我正在使用

mysqli_ping()
检查 mysqli 连接是否已启动。在最新的 PHP 8.4 版本中,该函数已被弃用,并将在将来删除。为什么这个函数被弃用了,我可以用什么来代替它,我一开始就错误地使用了它?

php mysqli php-8.4
1个回答
0
投票

你可以用这样简单的东西替换:

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. 您确切地知道代码中的哪个点连接可能会断开
  2. 您在每个 mysqli 函数之前执行此操作

如果 1 为 true 那么为什么不直接销毁旧对象并创建新连接呢?

如果 2 为真,那么您将因为很少发生的事情而遭受严重的性能损失。 MySQL 连接很少断开。如果你的经常掉线,那么你需要调试并修复可能的根本原因。是 MySQL 服务器超时、网络问题还是其他原因?与其使用 try-catch,不如让代码出错并让 PHP 记录错误消息,以便您可以调查问题。

可能永远不需要检查 mysqli 连接是否处于活动状态。毕竟,PDO 没有方法可以做到这一点,而且它是连接数据库的首选扩展。

© www.soinside.com 2019 - 2024. All rights reserved.