PHP mysql_ping()和mysqli_ping()的区别

一、先来看看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重新连上。。;

扫描二维码关注公众号,回复: 894437 查看本文章

        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尘

猜你喜欢

转载自blog.csdn.net/cscrazybing/article/details/47127941