PDO无法捕获抛出的异常

4

好的,我无法捕获异常:

require_once 'config/config.php';
try {
    $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USER, DB_PASS,array(
        PDO::ATTR_PERSISTENT => true,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));
} catch (PDOException $e) {
    print "Unable to connect!: " . $e->getMessage() . BR;
    die();
}

try {
    $stmt = $dbh->prepare("SELECT id,email FROM no_table ORDER BY id DESC LIMIT 5");
    $stmt->execute();
    $stmt->bindColumn(1, $id, PDO::PARAM_INT);
    $stmt->bindColumn('email', $email, PDO::PARAM_STR);
    while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
        echo $id . "\t" . $email . BR;
    }
} catch (PDOException $e) {
    echo "Failed: " . $e->getMessage();
}

好的,我连接了,但是语法错误(没有no_table),它抛出异常,但我无法捕获。在浏览器中我看到了这个:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]:
Base table or view not found: 1146 Table 'no_table' doesn't exist' in 'somepath'
PDOStatement->execute() #1 {main} thrown in some.php on line 15

出现异常并没有被捕获,但如果在$stmt->execute();之间加上另一个try catch语句,就可捕获到它。

我的php版本是5.3.14。


除了问题本身,你为什么想要捕获它呢? - Your Common Sense
我无法重现你的代码。它对我来说是可以正常捕获的。 - Your Common Sense
我无法重现这个问题。PHP版本为5.4。 - DevZer0
如果这个查询出现问题,它会破坏我所有的脚本,但是异常被抛出后无法捕获,我的脚本就会停止,所以为了继续执行,我需要想办法捕获它。 - Simeon Kolev
你确定这个脚本是完全独立的吗?按照目前的情况,无法重现你的问题。 - Ja͢ck
显示剩余2条评论
1个回答

9

你在这个项目中是否一直在使用命名空间类?如果是,请尝试使用

\PDOException

取代

PDOException

在您的“catch”语句中。 我刚遇到了类似的问题,这个方法很有帮助。

运行良好。谢谢。 - Nega developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接