【发布时间】:2014-12-19 10:15:05
【问题描述】:
我正在尝试根据数据库是否可以连接来显示服务器状态。使用老派mysql_connect() 和mysqli_connect() 很容易。我试图保持现代,所以我使用 PDO,但我不知道如何抑制默认警告。据我所知,您需要使用 getMessage() 函数来打印 PDO 警告,但我没有使用它。
这是我的代码:
8 $dbstatus = 1;
9 try {
10 $db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname, $dbuser, $dbpasswd);
11 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
12 } catch(PDOException $e) {
13 $dbstatus = 0;
14 }
15 if($dbstatus == 1) {
16 echo '<span style="color: green">DB Up</span>';
17 } else {
18 echo '<span style="color: red">DB Down</span>';
19 exit;
20 }
所有连接变量均已提供且正确,但$dbhost 除外,为了测试而故意破坏了它。现在,它会产生所需的结果,但也会打印一条警告消息:
警告:PDO::__construct():php_network_getaddresses:getaddrinfo 失败:不知道这样的主机。在 C:\xampp\htdocs\cd\includes\dbconnect.php 第 10
行
如果我更正了 $dbhost 变量,它工作正常,所以我知道问题不在于 PDO 语句可用。
关于我缺少什么的任何想法?
解决方案
我使用了 jeroen 提供的变体:
if(filter_var(gethostbyname($dbhost), FILTER_VALIDATE_IP)) {
$dbstatus = 1;
try {
$db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname, $dbuser, $dbpasswd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch(PDOException $e) {
$dbstatus = 0;
}
} else {
$dbstatus = 0;
}
if($dbstatus == 1) {
echo '<span style="color: green">DB Up</span>';
} else {
echo '<span style="color: red">DB Down</span>';
exit;
}
感谢您的帮助,我希望这对其他人有帮助! ^^
【问题讨论】:
-
在返回 json 的 ajax 调用中,警告(似乎无法捕获)使我最后两天的工作毫无用处。这很糟糕
标签: php mysql pdo exception-handling suppress-warnings