一、先来看看PHP手册中的解释
1、mysql_ping():检查到服务器的连接是否正常。如果断开,则自动尝试连接。本函数可用于空闲很久的脚本来检查服务器是否关闭了连接,如果有必要则重新连接上。如果到服务器的连接可用则 mysql_ping() 返回 TRUE
,否则返回FALSE
。
2、mysqli_ping():Checks whether the connection to the server is working. If it has gone down,and global option mysqli.reconnect is enabled an automatic reconnection is attempted.
个人看了函数名字后、一开始认为俩函数是一样的,但是翻了手册后发现有不同,不同已经在上面用红色标出来了,那么实验一下。
二、实验
实验方法:
1、step1:编写PHP脚本创建到数据库的连接$conn、然后sleep一段时间后分别使用mysql_ping($conn)和mysqli_ping($conn)、观察返回值;
step2:在这个sleep的时间内到mysql server上kill掉刚刚php脚本建立的连接,看俩函数哪个能使之前建立的连接$conn重新有效。
2、实验结果是 俩都没有使得$conn重新连上。。;
3、结合PHP手册中关于mysqli_ping()的解释“and global option mysqli.reconnect is enabled”,那么到php.ini中看一下、发现 mysqli.reconnect = Off。
4、修改php.ini,改为mysqli.reconnect = On,而后再次测试:此时mysql_ping()依旧无法使得$conn重连、但是mysqli_ping()办到了。
实验结论,对于数据库单方面干掉的连接:
1)mysql_ping()是无论如何都不会重连的;
2)mysqli_ping()在mysqli.reconnect为On使可以、为Off时不可以;
三、PASS,额外发现:
1、若mysqli.reconnect为On、那么mysqli_query()会主动重新建立到mysql的连接、让$conn断掉的事情用户无感知:
实验中砍掉$conn、而后执行mysqli_query()后、php在新的端口重新建立了到mysql的连接、使query正常进行。
(PHP5.5.0以后废弃了mysql_query()这系列函数、改用MySQLi或PDO_MySQL系列)
From:purple尘