我正在尝试建立一个持久连接的php + pdo网站。当然,连接每8小时不活动关闭,所以我试图创建一个php文件,如果关闭则重新打开连接
这是我的代码:
try{
$db = new PDO("mysql:host=$database_ip;dbname=$database_name", $database_username, $database_password, array(PDO::ATTR_PERSISTENT => true));
}catch(Exception $x){
try{
$db = new PDO("mysql:host=$database_ip;dbname=$database_name", $database_username, $database_password);
}catch(Exception $x){
echo 'Failed database error';
}
}
This表示"如果连接失败,PDO :: __ construct()将始终抛出PDOException,无论当前设置了哪个PDO :: ATTR_ERRMODE。未捕获的例外是致命的。"
问题在于,即使异常被捕获,它仍然是致命的:/
这是错误:
警告:PDO :: __ construct():MySQL服务器已经 /path/to/website/mysql.inc.php 在 3行中消失了
答案 0 :(得分:4)
首先你应该抓住PDOException
其次,您已尝试重新连接,因此请将ATTR_PERSISTENT
设置为FALSE
。
try{
$db = new PDO( '...' ); // array(PDO::ATTR_PERSISTENT => FALSE)
}catch(PDOException $x){
echo 'Caught exception: ', $x->getMessage(), "\n";
try{
//reconnect
$db = new PDO( '...' );
}catch(PDOException $e){
throw new Exception('Failed database error'.$e->getMessage());
}
}
答案 1 :(得分:1)
@运算符禁止警告:
$db = @new PDO(...