PHP头条
热点:

MySQL】

php中的mysql客户端都没有设置超时的选项,mysqli和mysql都没有,但是libmysql是提供超时选项的,只是我们在php中隐藏了而已。

那么如何在PHP中使用这个操作捏,就需要我们自己定义一些MySQL操作常量,主要涉及的常量有:

  1. MYSQL_OPT_READ_TIMEOUT=11;  
  2.  
  3. MYSQL_OPT_WRITE_TIMEOUT=12;  

这两个,定义以后,可以使用 options 设置相应的值。

不过有个注意点,mysql内部实现:

1. 超时设置单位为秒,最少配置1秒

2. 但mysql底层的read会重试两次,所以实际会是 3 秒

重试两次 + 自身一次 = 3倍超时时间,那么就是说最少超时时间是3秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。

查看一个设置访问mysql超时的php实例:

  1. <?php   
  2. //自己定义读写超时常量  
  3.  
  4. if (!defined('MYSQL_OPT_READ_TIMEOUT')) {  
  5.  
  6.         define('MYSQL_OPT_READ_TIMEOUT',  11);  
  7.  
  8. }  
  9.  
  10. if (!defined('MYSQL_OPT_WRITE_TIMEOUT')) {  
  11.  
  12.         define('MYSQL_OPT_WRITE_TIMEOUT', 12);  
  13.  
  14. }  
  15.  
  16. //设置超时  
  17.  
  18. $mysqli = mysqli_init();  
  19.  
  20. $mysqli->options(MYSQL_OPT_READ_TIMEOUT, 3);  
  21.  
  22. $mysqli->options(MYSQL_OPT_WRITE_TIMEOUT, 1);  
  23.  
  24.    
  25.  
  26. //连接数据库  
  27.  
  28. $mysqli->real_connect("localhost""root""root""test");  
  29.  
  30. if (mysqli_connect_errno()) {  
  31.  
  32.    printf("Connect failed: %s/n", mysqli_connect_error());  
  33.  
  34.    exit();  
  35.  
  36. }  
  37.  
  38. //执行查询 sleep 1秒不超时  
  39.  
  40. printf("Host information: %s/n"$mysqli->host_info);  
  41.  
  42. if (!($res=$mysqli->query('select sleep(1)'))) {  
  43.  
  44.     echo "query1 error: "$mysqli->error ."/n";  
  45.  
  46. else {  
  47.  
  48.     echo "Query1: query success/n";  
  49.  
  50. }  
  51.  
  52. //执行查询 sleep 9秒会超时  
  53.  
  54. if (!($res=$mysqli->query('select sleep(9)'))) {  
  55.  
  56.     echo "query2 error: "$mysqli->error ."/n";  
  57.  
  58. else {  
  59.  
  60.     echo "Query2: query success/n";  
  61.  
  62. }  
  63.  
  64. $mysqli->close();  
  65.  
  66. echo "close mysql connection/n";  
  67.  
  68. ?> 

延伸阅读:

http://blog.csdn.net/heiyeshuwu/article/details/5869813


www.phpzy.comtrue/php/2425.htmlTechArticleMySQL】 php中的mysql客户端都没有设置超时的选项,mysqli和mysql都没有,但是libmysql是提供超时选项的,只是我们在php中隐藏了而已。 那么如何在PHP中使用这...

相关文章

相关频道:

PHP之友评论

今天推荐