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