簡體   English   中英

PHP PDO檢查mysql錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM