PHP / PDO - 服务器已经消失,例外

时间:2014-05-05 20:40:18

标签: php mysql pdo

我正在尝试建立一个持久连接的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行中消失了

2 个答案:

答案 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(...