发生故障时的 PDO 构造

PDO construct in case of failure

我正在使用这种pdo连接函数:

class MyPDO extends PDO{

    const DB_HOST='localhost';
    const DB_PORT='3306';
    const DB_NAME='testdb';
    const DB_USER='root';
    const DB_PASS='root';

    public function __construct($options=null){
        parent::__construct('mysql:host='.MyPDO::DB_HOST.';port='.MyPDO::DB_PORT.';dbname='.MyPDO::DB_NAME,MyPDO::DB_USER,MyPDO::DB_PASS,$options);
    }

    public function query($query){ //secured query with prepare and execute
        $args = func_get_args();
        array_shift($args); //first element is not an argument but the query itself, should removed

        $reponse = parent::prepare($query);
        $reponse->execute($args);
        return $reponse;

    }

}

现在连接和查询工作正常,一切都很好,但如果 mysql 服务器关闭,我正在使用的脚本将停止工作。相反,如果 mysql 服务器没有响应或 mysql 设置设置错误,我希望它 return 一些消息。

我试过

if(new MyPDO===false){echo "The database is down currently. Please try again later."}

但这不起作用。请帮帮我。 我所需要的只是在 mysql 连接不可用时显示一条消息,而不是破坏整个脚本并显示空白页面(就像当前一样)。

来自 PHP PDO documentation

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

捕获错误并做任何你想做的事。呈现页面、显示错误、重定向等等。

在构建 PDO 时,在父 class 中使用 try catch 应该可行:

try{
   //your pdo construction
   $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);  
}catch(PDOException $e){
    echo "Error"; // you could also add $e->getMessage(); to display a message why your try catch returned false
}

或者你可以这样做:

if($yourpdovar instanceof PDO) {
   //succeeded message.
}else{
   //error message
}

此代码检查您的变量是否为 PDO 变量。它很简单,您可以将它放在代码中的任何地方。