diff --git a/classes/db/Db.php b/classes/db/Db.php index 761ff8b2d..4b460af11 100644 --- a/classes/db/Db.php +++ b/classes/db/Db.php @@ -637,9 +637,9 @@ abstract class DbCore * @param bool $engine * @return int */ - public static function checkConnection($server, $user, $pwd, $db, $new_db_link = true, $engine = null) + public static function checkConnection($server, $user, $pwd, $db, $new_db_link = true, $engine = null, $timeout = 5) { - return call_user_func_array(array(Db::getClass(), 'tryToConnect'), array($server, $user, $pwd, $db, $new_db_link, $engine)); + return call_user_func_array(array(Db::getClass(), 'tryToConnect'), array($server, $user, $pwd, $db, $new_db_link, $engine, $timeout)); } /** diff --git a/classes/db/DbMySQLi.php b/classes/db/DbMySQLi.php index 3ffb5d793..4aef886ef 100644 --- a/classes/db/DbMySQLi.php +++ b/classes/db/DbMySQLi.php @@ -161,10 +161,16 @@ class DbMySQLiCore extends Db /** * @see Db::checkConnection() */ - static public function tryToConnect($server, $user, $pwd, $db, $newDbLink = true, $engine = null) + public static function tryToConnect($server, $user, $pwd, $db, $newDbLink = true, $engine = null, $timeout = 5) { - $link = @new mysqli($server, $user, $pwd, $db); - if (mysqli_connect_error()) + $link = mysqli_init(); + if (!$link) + return -1; + + if (!$link->options(MYSQLI_OPT_CONNECT_TIMEOUT, $timeout)) + return 1; + + if (!$link->real_connect($server, $user, $pwd, $db); return (mysqli_connect_errno() == 1049) ? 2 : 1; if (strtolower($engine) == 'innodb') diff --git a/classes/db/DbPDO.php b/classes/db/DbPDO.php index 01aab42bd..25486bfd9 100644 --- a/classes/db/DbPDO.php +++ b/classes/db/DbPDO.php @@ -179,11 +179,11 @@ class DbPDOCore extends Db /** * @see Db::checkConnection() */ - static public function tryToConnect($server, $user, $pwd, $db, $newDbLink = true, $engine = null) + public static function tryToConnect($server, $user, $pwd, $db, $newDbLink = true, $engine = null, $timeout = 5) { try { - $link = @new PDO('mysql:dbname='.$db.';host='.$server, $user, $pwd); + $link = @new PDO('mysql:dbname='.$db.';host='.$server, $user, $pwd, array(PDO::ATTR_TIMEOUT => $timeout)); } catch (PDOException $e) { diff --git a/classes/db/MySQL.php b/classes/db/MySQL.php index 32a2d201d..e9082084c 100644 --- a/classes/db/MySQL.php +++ b/classes/db/MySQL.php @@ -156,6 +156,7 @@ class MySQLCore extends Db */ public static function tryToConnect($server, $user, $pwd, $db, $newDbLink = true, $engine = null) { + ini_set('mysql.connect_timeout', $timeout); if (!$link = @mysql_connect($server, $user, $pwd, $newDbLink)) return 1; if (!@mysql_select_db($db, $link))