PHP mysqli重新连接问题

Eva*_*ers 12 php mysqli fork reconnect

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

在我的脚本中,一个类创建了一个mysqli连接,它在整个函数中使用它.之后,这个脚本分叉.这些连接也被孩子们使用,但是当孩子们死亡时,我遇到了父母关闭连接(MYSQL服务器已经离开)的问题.

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

php mysql_connect函数允许你获取已经存在的连接,所以如果我使用mysql而不是mysqli,我可以简单地在进程分叉后重用子进程中的连接.但是mysqli似乎没有任何这样的功能......

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

有什么建议?

Bil*_*win 15

文档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中的 "Will not Fix"答案

因此,似乎没有解决PHP中的自动重新连接的问题.

  • 那很有效.我没有意识到你不能使用ini_set来修改这个变量,而且我是天才,我之前将这行添加到了php.ini,不知道已经有一个mysli.reconnect = Off line文件.但删除那个只是使用mysqli.reconnect工作并使mysqli-> ping()执行就像mysql_ping.谢谢您的帮助! (3认同)