我使用PHP中的mysqli类有问题,我一直没能在别处找到了答案。

在我的脚本类创建,它使用整个它的功能的mysqli连接。随后,该脚本叉。该连接使用的儿童为好,但我运行到连接的问题在父被关闭(MySQL服务器客场飘)的时候,孩子死了。

在我切换到mysqli的(只是用的MySQL)我简称mysql_ping以确保数据库连接在那里在父进程执行查询之前。库MySQLi也有类似的ping功能,但如果连接消失它实际上并没有重新连接。我尝试使用mysqli.reconnect = ON没有运气全局设置(使用php.ini并的ini_set)。

在PHP mysql_connect函数让你可以把一个已经存在的连接,所以如果我采用的是MySQL,而不是mysqli的,我可以简单地重复使用过程分叉之后在孩子的连接。但mysqli的似乎并不具有任何这样的功能...

我能够做的唯一的事情就是调用mysqli->中国平安(),如果该返回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自动重新连接无解了。

其他提示

ü可以尝试一些有点不同..不是..坪尝试发送一个非常简单的低强度的查询,如“选择现在()”,看看你得到任何更好的结果。

你不能使用永久连接?另外,是真的有必要叉()?

function IsConnected() {
    if (empty($this->_connectionID) === FALSE && mysqli_ping($this->_connectionID) === TRUE) {
        return true; // still have connect
    }
    $this->_connectionID = false;
    return false; // lose connection
}

使用 http://www.php.net/manual/ EN / mysqli.real-connect.php ...重新安装PHP和检查您的php.ini设置

我想你需要设置my.cng mysqli.reconnect,这是MySQL的配置,而不是php.ini中,我不能设法改变通过的ini_set重新连接,但我的系统管理员做到了在my.cnf

所以,稍微困惑的是别人的php.ini内完成它......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top