mysql设置查询超时方法
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-13 14:48:51 浏览: 评论:0
文章来介绍了自定义mysql查询超时的时间长度,下面我们来看看详细的设置方法,首先, 在libmysql中,是提供了MYSQL_OPT_READ_TIMEOUT设置项的,并且libmysql中提供了设置相关设置项的API,代码如下:
- mysql_options:
- int STDCALL
- mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
- {
- DBUG_ENTER("mysql_option");
- DBUG_PRINT("enter",("option: %d",(int) option));
- switch (option) {
- case MYSQL_OPT_CONNECT_TIMEOUT:
- mysql->options.connect_timeout= *(uint*) arg;
- break;
- /** 读超时时间 */
- case MYSQL_OPT_READ_TIMEOUT:
- mysql->options.read_timeout= *(uint*) arg;
- break;
- case MYSQL_OPT_WRITE_TIMEOUT:
- mysql->options.write_timeout= *(uint*) arg;
- break;
- case MYSQL_OPT_COMPRESS:
- mysql->options.compress= 1;
但是,可惜的是,目前只有mysqli扩展,把mysql_options完全暴露给了PHP,代码如下:
- PHP_FUNCTION(mysqli_options)
- {
- /** 有省略 */
- switch (Z_TYPE_PP(mysql_value)) {
- /** 没有任何限制, 直接传递给mysql_options */
- case IS_STRING:
- ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(mysql_value));
- break;
- default:
- convert_to_long_ex(mysql_value);
- l_value = Z_LVAL_PP(mysql_value);
- ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value); //phpfensi.com
- break;
- }
- RETURN_BOOL(!ret);
- }
但是因为Mysqli并没有导出这个常量,所以我们需要通过查看MySQL的代码,得到MYSQL_OPT_READ_TIMEOUT的实际值,然后直接调用mysql_options,代码如下:
- enum mysql_option
- {
- MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE,
- MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
- MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE,
- MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT,
- MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT,
- MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
- MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH,
- MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT,
- MYSQL_OPT_SSL_VERIFY_SERVER_CERT
- };
可以看到,MYSQL_OPT_READ_TIMEOUT为11,现在,我们就可以设置查询超时了,代码如下:
- $mysqli = mysqli_init();
- $mysqli->options(11 /*MYSQL_OPT_READ_TIMEOUT*/, 1);
- $mysql->real_connect(***);
不过, 因为在libmysql中有重试机制(尝试一次, 重试俩次),所以,最终我们设置的超时阈值都会三倍于我们设置的值.
也就是说,如果我们设置了MYSQL_OPT_READ_TIMEOUT为1,最终会在3s以后超时结束,也就是说,我们目前能设置的最短超时时, 就是3秒…
虽说大了点,不过总比没有好, 呵呵
Tags: mysql设置查询 mysql查询超时
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)