我使用这种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连接不可用而不是破坏整个脚本并显示一个空白页面(就像它当前一样)。
答案 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();
}
抓住错误并做任何你想做的事。渲染页面,显示错误,重定向,等等。