我用这一行连接到 MySQL 数据库,只是想知道是否有办法为连接尝试设置超时?
$db = new mysqli($server, $usr, $passwd, $dbname);
是的,您可以显式指定尝试使用 mysqli 从 php 程序连接到 MySQL 数据库的超时。
不过,它有点毛茸茸的。 当您使用
new mysqli()
时,您使用的是可重用连接池。如果您想设置超时或任何其他选项,则需要使用 real_connect
代替,如下所示:
$timeout = 30; /* thirty seconds for timeout */
$link = mysqli_init( );
$link->options( MYSQLI_OPT_CONNECT_TIMEOUT, $timeout ) ||
die( 'mysqli_options croaked: ' . $link->error );
$link->real_connect($server, $usr, $passwd, $dbname) ||
die( 'mysqli_real_connect croaked: ' . $link->error );
这里有一个不错的解释:https://php.net/manual/en/mysqli.real-connect.php
我发现使用
set_opt()
比在 options()
调用中使用标志更干净、更容易。
$timeout = 5;
$conn = mysqli_init();
$conn->set_opt( MYSQLI_OPT_CONNECT_TIMEOUT, $timeout );
这对我有用,因为似乎无法在
real_connect
函数中设置多个标志,并且多个 options
调用无法设置多个标志。