[英]PHP PDO check for mysql error
我有这个问题使我发疯。 我想要的只是检查查询是否有错误,如果显示则显示错误,否则运行查询。
我几乎有以下工作(因为它运行两次插入查询)
[..]
$dbdata = new mySQLAccessData();
$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
$defaults = new Defaults();
[..]
if(!$db->exec($sql)){
echo($defaults->throwError('MySql error',implode(":",$db->errorInfo())));
}else{
$db->exec($sql);
$defaults->writeLog($table,$db->lastInsertId(),'add');
}
我尝试了很多方法(除了try(){}catch(){}
方法之外),但是除了上面的代码外,其他方法都无效。 它以我想要的方式显示错误,并且仅在发生错误时显示,但运行exec()
两次...
有人可以救我吗?
如果您希望看到发生错误时引发的异常,只需设置PDO错误模式 (另请参见: 连接和连接管理 ):
$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
例如,这将使您的代码自动引发异常。 可能正是您要找的东西。
您的代码的实际问题是exec
两次。 您不需要:
$success = $db->exec($sql);
if (!$success) {
echo $defaults->throwError('MySql error', implode(":", $db->errorInfo()));
} else {
# do not exec *again* here.
$defaults->writeLog($table, $db->lastInsertId(), 'add');
}
为什么要在else
部分再次执行查询? 通常,您只是尝试运行查询,如果发生错误,请对它们作出反应。
[..]
$dbdata = new mySQLAccessData();
$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
$defaults = new Defaults();
[..]
if(!$db->exec($sql)){
echo($defaults->throwError('MySql error',implode(":",$db->errorInfo())));
}else{
$defaults->writeLog($table,$db->lastInsertId(),'add');
}
据我所知,在实际执行查询之前没有选择“测试”查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.