在失败的情况下构建PDO

时间:2015-01-29 14:43:42

标签: php pdo

我使用这种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设置设置错误,我希望它返回一些消息。

我尝试过像

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

但这并不奏效。请帮帮我。 我需要的是显示一条消息,以防万一mysql连接不可用而不是破坏整个脚本并显示一个空白页面(就像它当前一样)。

2 个答案:

答案 0 :(得分:1)

在构建PDO时,在父类中使用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变量。它很简单,你可以把它放在代码中的任何地方。

答案 1 :(得分:-1)

来自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();
}

抓住错误并做任何你想做的事。渲染页面,显示错误,重定向,等等。