PHP PDO检查mysql错误

时间:2012-11-07 10:49:01

标签: php oop pdo

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

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

[..]

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

有人可以救我吗?

2 个答案:

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

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