PHP PDO尝试捕获不捕获

时间:2012-09-18 14:09:23

标签: php pdo try-catch

我有这段代码:

try {
    $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_database, $db_user, $db_pass);
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $dbh->prepare('DELECT userID FROM tblusers');
} catch (PDOException $e) {
    echo "Error!: " . $e->getMessage() . "<br/>";
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

当我在IDE中使用调试器逐步执行代码时,即使我的catch语句中有错误,它也永远不会进入prepare块。

我做错了什么?

我是PDO的新手并尝试/捕获块,所以如果这是一个愚蠢的问题,请耐心等待我!

3 个答案:

答案 0 :(得分:2)

尝试添加$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

  

模拟的预处理语句不与数据库服务器通信,因此PDO :: prepare()不检查语句。

参考:http://php.net/manual/en/pdo.prepare.php

答案 1 :(得分:2)

PDO_mysql默认使用模拟的预准备语句(性能原因),因此prepare不会抛出异常。 PDOStatement::execute会尽力。

你可以通过像jonnyynnoj提到的那样关闭emmulation,但我发现在执行时捕获异常通常已经足够了。

答案 2 :(得分:0)

try / catch只会捕获异常。其他错误(解析错误,运行时错误等)不会执行catch-block。

在您的情况下,只有“PDOException”类型的异常被捕获,其他所有内容都可能被显示或记录(取决于您在php.ini中的错误报告指令)。

什么显示为错误?