手册里只有这么四个选项
跟踪 mysqli 的扩展源代码发现它底层调用的是 libmysqlclient 的 mysql_options:
php-5.2.8/ext/mysqli/mysqli_api.c
并且在mysqli的PHP扩展中就只导出了几个变量:
php-5.2.8/ext/mysqli/mysqli.c
大概看了一下 libmysqlclient 的代码,发现其实它自带是有读写超时设置的:
mysql-5.1.30/sql-common/client.c
因为它自己定义了很多操作选项,只是php扩展里没有:
mysql-5.1.30/include/mysql.h
看看mysql中的读写超时是如何实现的:
mysql-5.1.30/sql-common/client.c
读写超时真正操作的地方,超时处理这里重试了两次,还是写死了:
mysql-5.1.30/sql/net_serv.cc
现在基本得出了结论:
按照上面查看代码来看,目前PHP针对MySQL查询超时以下限制: 1. 超时设置单位为秒,最少配置1秒 2. 但mysql底层的read会重试两次,所以实际会是 3 秒 重试两次 + 自身一次 = 3倍超时时间。 那么就是说最少超时时间是3秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。
现在我们来看看如果我们自己要设置超时,我们自己压入 MYSQL_OPT_READ_TIMEOUT 也是可以达到读写超时效果的,写一段代码来测试一下:
echo "quer