在php里Pdo是没有mysql_ping和mysqli_ping函数的,可以使用以下方法来代替它
class NPDO { private $pdo; private $params; public function __construct() { $this->params = func_get_args(); $this->init(); } public function __call($name, array $args) { return call_user_func_array(array($this->pdo, $name), $args); } // The ping() will try to reconnect once if connection lost. public function ping() { try { $this->pdo->query('SELECT 1'); } catch (PDOException $e) { $this->init(); // Don't catch exception here, so that re-connect fail will throw exception } return true; } private function init() { $class = new ReflectionClass('PDO'); $this->pdo = $class->newInstanceArgs($this->params); } }
转自:https://terenceyim.wordpress.com/2009/01/09/adding-ping-function-to-pdo/
或者使用以下方法(目前本人在用)
/** * 检查连接是否可用 * @param Link $dbconn 数据库连接 * @return Boolean */ function ping() { try { $ret = $this->getAttribute(constant("PDO::ATTR_SERVER_INFO")); if ($ret === null) { return false; } } catch (\PDOException $e) { if(strpos($e->getMessage(), 'MySQL server has gone away')!==false){ echo PHP_EOL . $e->getMessage() . PHP_EOL; return false; } } return true; }