关于php:在PDO连接上捕获异常

Catch exception when on PDO connection

我使用PDO建立了以下连接。 显然,由于我未指定主机或数据库(或用户或密码),因此无法连接

1
$dbh = new PDO('mysql:host=;dbname=', '', '');

..so如何捕获异常? 我正在尝试这样的事情:

1
2
3
4
5
6
try {
  $dbh = new PDO('mysql:host=;dbname=', '', '');
} catch (Exception $e) {
  echo 'Error: ',  $e->getMessage(),"\
"
;
}

..但不显示任何消息。 为什么?


您正在使用自定义名称空间吗? 那么你需要改变

1
2
3
4
} catch (\\Exception $e) {
  echo 'Error: ',  $e->getMessage(),"\
"
;
}

注意Exception之前的反斜杠。


您需要传递属性ERRMODE_EXCEPTION,以在连接尝试失败时接收异常:

1
2
3
$dbh = new PDO('mysql:host=;dbname=', '', '', array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));

查看PDO::__construct()的手册页以获取更多信息。

还请检查@Ali的答案!