PHP mysqli重新连接问题 - php

我在PHP中使用mysqli类时遇到麻烦,而且无法在任何地方找到答案。

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

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

php mysql_connect函数允许您获取一个已经存在的连接,因此,如果我使用的是mysql而不是mysqli,则可以在该过程分支之后立即在子级中重新使用该连接。但是mysqli似乎没有任何此类功能...

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

有什么建议?

参考方案

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

更新:自从我在2009年回答了这个问题以来,PHP在默认情况下已经开始使用mysqlnd驱动程序代替libmysql。如下面的注释中所述,mysqlnd不支持mysqli_ping()函数,PHP开发人员有意这样做,根据他们在https://bugs.php.net/bug.php?id=52561中的“不会解决”问题

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

PHP mysqli获取查询返回的第一行的值 - php

我正在使用mysqli从数据库中获取某些数据。我正在使用的查询已设置为仅从数据库返回一行。有没有一种方法可以在不使用while循环的情况下获取该行的值?我知道一个while循环对于返回多于一行的行很有用,但是如果不需要while循环,我想避免这种情况,因为不必要的代码是不好的编程。 参考方案 是的-您可以使用:$row = $result->fetch…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP-如何建议搜索字词,“你是说……?” - php

当使用不检索任何结果的术语搜索数据库时,我想允许“您是不是……”建议(例如Google)。例如,如果有人寻找“ jquyer””,它将输出“ did you mean jquery?”当然,建议结果必须与数据库内部的值匹配(我正在使用mysql)。您知道可以做到这一点的图书馆吗?我已经用谷歌搜索过,但是没有找到任何好的结果。或者,也许您有一个想法,该如何独自…