我有这个让我疯狂的问题。我只想检查一个错误的查询,如果是这样显示错误,否则运行查询。
我有以下几乎(因为它运行插入查询两次)工作
[..]
$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()
两次...
有人可以救我吗?
答案 0 :(得分:0)
如果您希望在发生错误时看到引发的异常,请set the PDO error-mode(另请参阅:Connections and Connection management):
$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');
}
答案 1 :(得分:0)
为什么要在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');
}
据我所知,在实际执行查询之前没有“测试”查询的选项。