PDO错误处理查询

时间:2013-08-31 20:21:14

标签: php pdo mysqli

我最近从使用MySQLI切换到使用PDO,看起来PDO并不总是让您知道在运行错误的查询时出现错误。

使用MYSQLI,您可以:

if($dbh->query("SELECT ...") === false) {
  echo "Error";
}

如果存在SQL语法错误或名称不正确的列或诸如此类的东西,则总会发生这种情况(这是所需的结果)。

使用PDO时:

if($dbh->query("SELECT ...") === false) {
  echo "Error";
}

当你遇到同样的错误时,并不总是会发生这种情况!

那么如何使用PDO获得相同的预期效果?我希望能够在上面的代码中发生这种情况,因为查询存在问题。换句话说,除非我得到某种结果集(无论是没有记录还是一些记录),我希望$ dbh-> query(...)返回false。

2 个答案:

答案 0 :(得分:1)

尝试启用例外:

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

然后抓住他们:

try{
  $dbh->query("SELECT ...");

}catch(\Exception $e){
  printf('Error: %s', $e->getMessage());  
}

答案 1 :(得分:-2)

首先,您对使用mysqli进行错误报告的想法是错误的。回应错误是一种非常糟糕的做法。相反,您必须将mysqli错误转换为PHP错误。

所以你必须使用PDO 幸运的是,PDO可以抛出异常。连接PDO tag wiki中解释的方式,你将始终有一个异常,当它没有被捕获时,也会被转换为PHP错误,并且可以像处理其他PHP错误一样处理。

作为副作用,您根本不需要检查查询结果,使用所有查询创建长而多风的结构,将执行和错误检查填入一行。所以,你可以写出整洁可读的代码:

$sql = "SELECT ...";
$dbh->query($sql);

请注意,如果您使用的是query()而不是prepare(),则根本不需要使用PDO。