0

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

我有以下几乎(因为它运行插入查询两次)工作

[..]

$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()两次...

有人可以保释我吗?

4

2 回答 2

0

如果您想在发生错误时看到抛出的异常,只需设置 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');
}
于 2012-11-07T10:51:41.987 回答
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');
}

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

于 2012-11-07T10:52:50.907 回答