PHP MySQL设置连接超时

时间:2012-03-05 05:41:26

标签: php mysql connection-timeout

使用mysql.connect_timeout,PHP连接上的某些帖子超时。我想知道这个来自PHP的设置超时是否超时初始连接到MySQL或对数据库的特定查询有效?

我的情况是,我有一个页面与MySQL连接在一起然后我执行说3-4个查询到一个接一个的MySQL。第一次和第二次查询仅执行1-2秒,而第三次查询需要20秒。现在,在第三次查询花费超过20秒的情况下,我想要超时。因此,这里的问题是,从PHP设置此时间适用于与数据库的初始连接,或者它也适用于每个后续查询(独立)。如果以后是这种情况,那么如何在第二次查询20秒后将其设置为超时?

6 个答案:

答案 0 :(得分:5)

connect_timeout参数仅在连接时有效。检查数据库服务器是否在20秒左右可以访问是很有用的。连接后,指定的超时不再有效。

我在官方mysql手册页上找不到任何查询超时参数:http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html所以我不认为这是可能的。

答案 1 :(得分:5)

看到它:

set_time_limit(0);   
ini_set('mysql.connect_timeout','0');   
ini_set('max_execution_time', '0');   

答案 2 :(得分:3)

sigalarm是你的朋友。您可以设置警报,并使用信号处理程序来检测警报。

http://php.net/manual/en/function.pcntl-alarm.php

答案 3 :(得分:2)

使用MySQL 5.7.4或更高版本并设置适当的“max_statement_time”变量,如果达到超时,查询将失败

请参阅http://mysqlserverteam.com/server-side-select-statement-timeouts/

答案 4 :(得分:2)

它在你的php配置文件中。此文件的位置因系统而异。在Ubuntu和Debian上,它位于/etc/php5/apache2/php.ini

mysql.connect_timeout = 60 /* the default value is 60 seconds */

答案 5 :(得分:0)

您必须派生子进程,如果在20秒内未满足某些条件,则父进程将终止子进程。

或者使用像node.js这样的语言,它不会像查询一样阻止当前线程进行IO操作。