国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql設(shè)置查詢超時(shí)方法

2024-07-24 12:38:55
字體:
供稿:網(wǎng)友

文章來介紹了自定義mysql查詢超時(shí)的時(shí)間長度,下面我們來看看詳細(xì)的設(shè)置方法,首先, 在libmysql中,是提供了MYSQL_OPT_READ_TIMEOUT設(shè)置項(xiàng)的,并且libmysql中提供了設(shè)置相關(guān)設(shè)置項(xiàng)的API,代碼如下:

  1. mysql_options: 
  2.  
  3. int STDCALL 
  4.  
  5. mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) 
  6.  
  7.  
  8.   DBUG_ENTER("mysql_option"); 
  9.  
  10.   DBUG_PRINT("enter",("option: %d",(int) option)); 
  11.  
  12.   switch (option) { 
  13.  
  14.   case MYSQL_OPT_CONNECT_TIMEOUT: 
  15.  
  16.     mysql->options.connect_timeout= *(uint*) arg; 
  17.  
  18.     break
  19.  
  20.   /** 讀超時(shí)時(shí)間 */ 
  21.  
  22.   case MYSQL_OPT_READ_TIMEOUT: 
  23.  
  24.     mysql->options.read_timeout= *(uint*) arg; 
  25.  
  26.     break
  27.  
  28.   case MYSQL_OPT_WRITE_TIMEOUT: 
  29.  
  30.     mysql->options.write_timeout= *(uint*) arg; 
  31.  
  32.     break
  33.  
  34.   case MYSQL_OPT_COMPRESS: 
  35.  
  36.     mysql->options.compress= 1; 

但是,可惜的是,目前只有mysqli擴(kuò)展,把mysql_options完全暴露給了PHP,代碼如下:

  1. PHP_FUNCTION(mysqli_options) 
  2.  
  3.  
  4.  /** 有省略 */ 
  5.  
  6.      switch (Z_TYPE_PP(mysql_value)) { 
  7.  
  8.         /** 沒有任何限制, 直接傳遞給mysql_options */ 
  9.  
  10.         case IS_STRING
  11.  
  12.             ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(mysql_value)); 
  13.  
  14.             break
  15.  
  16.         default
  17.  
  18.             convert_to_long_ex(mysql_value); 
  19.  
  20.             l_value = Z_LVAL_PP(mysql_value); 
  21.  
  22.             ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);  //Vevb.com 
  23.  
  24.             break
  25.  
  26.     } 
  27.  
  28.     RETURN_BOOL(!ret); 
  29.  

但是因?yàn)镸ysqli并沒有導(dǎo)出這個(gè)常量,所以我們需要通過查看MySQL的代碼,得到MYSQL_OPT_READ_TIMEOUT的實(shí)際值,然后直接調(diào)用mysql_options,代碼如下:

  1. enum mysql_option 
  2.  
  3.  
  4.   MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, 
  5.  
  6.   MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, 
  7.  
  8.   MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, 
  9.  
  10.   MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, 
  11.  
  12.   MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, 
  13.  
  14.   MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, 
  15.  
  16.   MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, 
  17.  
  18.   MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, 
  19.  
  20.   MYSQL_OPT_SSL_VERIFY_SERVER_CERT 
  21.  
  22. }; 

可以看到,MYSQL_OPT_READ_TIMEOUT為11,現(xiàn)在,我們就可以設(shè)置查詢超時(shí)了,代碼如下:

  1. $mysqli = mysqli_init(); 
  2.  
  3. $mysqli->options(11 /*MYSQL_OPT_READ_TIMEOUT*/, 1); 
  4.  
  5. $mysql->real_connect(***); 

不過, 因?yàn)樵趌ibmysql中有重試機(jī)制(嘗試一次, 重試倆次),所以,最終我們?cè)O(shè)置的超時(shí)閾值都會(huì)三倍于我們?cè)O(shè)置的值.

也就是說,如果我們?cè)O(shè)置了MYSQL_OPT_READ_TIMEOUT為1,最終會(huì)在3s以后超時(shí)結(jié)束,也就是說,我們目前能設(shè)置的最短超時(shí)時(shí), 就是3秒…

雖說大了點(diǎn),不過總比沒有好, 呵呵

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖江市| 亳州市| 恩平市| 胶州市| 海宁市| 虞城县| 阜康市| 泸溪县| 交城县| 元谋县| 望奎县| 鲁甸县| 纳雍县| 青海省| 阿瓦提县| 开化县| 文昌市| 桂东县| 余姚市| 山阴县| 丹凤县| 肥城市| 诸城市| 龙岩市| 安达市| 凤阳县| 永嘉县| 凤凰县| 都兰县| 阳城县| 天台县| 黑河市| 青岛市| 全椒县| 桐柏县| 浏阳市| 姜堰市| 枣庄市| 长顺县| 井冈山市| 吴江市|