gpt4 book ai didi

PHP mysqli 重新连接问题

转载 作者:行者123 更新时间:2023-12-02 10:33:05 28 4
gpt4 key购买 nike

我在 PHP 中使用 mysqli 类时遇到问题,并且无法在任何地方找到答案。

在我的脚本中,一个类创建了一个 mysqli 连接,并在其整个函数中使用该连接。之后,该脚本会 fork 。该连接也由子级使用,但是当子级死亡时,我遇到了父级中的连接被关闭(MYSQL Server 已消失)的问题。

在我切换到 mysqli 之前(只是使用 mysql),我只是调用 mysql_ping 以确保在父进程中执行查询之前数据库连接已存在。 Mysqli 有类似的 ping 功能,但如果连接消失,它实际上不会重新连接。我尝试使用 mysqli.reconnect=ON 全局设置,但没有成功(使用 php.ini 和 ini_set)。

php mysql_connect 函数允许您获取已经存在的连接,因此如果我使用 mysql 而不是 mysqli,我可以在进程 fork 后立即重用子级中的连接。但 mysqli 似乎没有任何这样的功能......

我唯一能做的就是调用 mysqli->ping() ,如果返回 false,则重新连接到父级中的数据库。这是非常低效的,我宁愿弄清楚如何使用 mysqli 正确地完成它(并且不需要手动重新连接),而必须改回 mysql..

有什么建议吗?

最佳答案

mysqli_ping() 的文档说,如果您将全局选项 mysqli.reconnect 设置为 1(在 php.ini 中),则 mysqli_ping() 当检测到连接消失时将重新连接。

更新:自从我在 2009 年回答这个问题以来,PHP 大多数情况下默认使用 mysqlnd 驱动程序,而不是 libmysql。正如下面的评论中提到的,mysqlnd 不支持 mysqli_ping() 函数,PHP 开发人员是故意这样做的,根据他们的“Won't Fix”回答https://bugs.php.net/bug.php?id=52561

因此 PHP 中似乎不再有自动重新连接的解决方案。

关于PHP mysqli 重新连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com