1

我目前已切换到使用 PDO,但在处理异常时遇到了麻烦。连接是正确的,查询工作完美,但是当我故意犯错误时,错误并没有像我预期的那样处理。

我已将查询中的表名更改为不存在的表。从下面看到的代码中,我希望页面打印出“数据库错误”,而是得到可怕的橙色错误说......

'未捕获的异常'PDOException' 带有消息'SQLSTATE [42S02]:未找到基表或视图:1146 表'test.post' 不存在'在 C:\wamp\www\website\functions.php 第 46 行'

这是连接数据库时的代码...

$hostname = 'localhost';
$username = '';
$password = '';
try{
    $dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
     print ("Database Error");
}

我犯了错误还是有不同的方法来处理 PDO 错误?

4

1 回答 1

5

连接后,需要设置错误处理:

$dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

编辑:请注意,异常在它被抛出的地方被捕获,所以你需要try catch在查询周围放置一个块,你在连接时使用的那个只捕获那里的异常(如果有的话,请参阅@Crontab 的评论)。

于 2012-04-12T13:54:00.683 回答