PHP PDO检查mysql错误

PHP PDO检查mysql错误,php,oop,pdo,Php,Oop,Pdo,我有一个让我发疯的问题。我只想检查查询是否有错误,如果是,则显示错误,否则运行查询 我有以下几点(因为它运行了两次insert查询)可以工作 我尝试了很多方法(其中包括try(){}catch(){}方法),但除了上面的代码外,其他方法都不起作用。它以我想要的方式显示错误,并且仅在出现错误时显示,但运行exec()两次 有人能救我吗?如果您想看到错误发生时抛出异常,只需(另请参见:): 例如,这将使您的代码自动抛出异常。也许正是你想要的 代码的实际问题是执行exec两次。你不需要: $succe

我有一个让我发疯的问题。我只想检查查询是否有错误,如果是,则显示错误,否则运行查询

我有以下几点(因为它运行了两次insert查询)可以工作

我尝试了很多方法(其中包括
try(){}catch(){}
方法),但除了上面的代码外,其他方法都不起作用。它以我想要的方式显示错误,并且仅在出现错误时显示,但运行
exec()
两次


有人能救我吗?

如果您想看到错误发生时抛出异常,只需(另请参见:):

例如,这将使您的代码自动抛出异常。也许正是你想要的

代码的实际问题是执行
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');
}

据我所知,在实际执行查询之前,没有“测试”查询的选项。

请阅读此处,为什么不将
$db->exec($sql)
的结果赋给一个变量<代码>$result=$db->exec($sql)。然后在
if($result)
中使用
$result
值。啊,我不知道查询会在
if()
部分中运行。谢谢你的提示@Maurice只要触发
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');
}
[..]

$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');
}