-1

我正在使用 PHP5 和 PDO 进行 mysql 查询。

我正在尝试使用 try/catch 处理来自查询的异常。但是,例如,如果我有这样的语法错误:

try{
    $sql = 'IggggNSERT INTO t_table (ID, MONTH) VALUES (:ID, :MONTH)';
    $r = $conn->prepare($sql);
    $r->bindValue(':ID', $id);
    $r->bindValue(':MONTH', $month);
    $r->execute();
    return $r;
}
catch (Exception $e) {
    die('Error');
}

我收到这个致命错误:

PHP Fatal error:  Call to a member function bindValue() on a non-object

但是没有引发异常,并且我的 catch 块没有执行。

我怎么能处理这个,所以我可以回滚以前的查询?

4

1 回答 1

1

如果问题发生在 PDO 内部,PDO 只会抛出异常。$r->bindValue尽管 $r 未能初始化,您得到的错误是关于您访问​​的参考。

在正常操作中,您的 SQL 不应该出现任何语法错误。

但是,您可以尝试在数据库文件中设置以下行:

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

据我从 PHP.NET 了解,如果设置了此行,prepare() 会引发异常,这应该会触发catch语句。

PHP.NET PDO::准备

如果数据库服务器成功准备语句,PDO::prepare() 返回一个 PDOStatement 对象。如果数据库服务器无法成功准备语句,则 PDO::prepare() 返回 FALSE 或发出 PDOException(取决于错误处理)。

于 2013-10-03T16:43:28.970 回答