新聞中心

1、PDO 的錯誤處理模式
PDO 中一共提供了三種不同的錯誤處理模式,不僅可以滿足不同風(fēng)格的編程,也可以調(diào)整擴(kuò)展處理錯誤的方式。
1) PDO::ERRMODE_SILENT
PDO::ERRMODE_SILENT 為默認(rèn)模式。 在發(fā)生錯誤時 PDO 將只簡單地設(shè)置錯誤碼,不做其它任何操作??墒褂?PDO::errorCode() 和 PDO::errorInfo() 兩個方法來檢查語句和數(shù)據(jù)庫對象。
如果錯誤是由于調(diào)用語句對象而產(chǎn)生的,那么可以調(diào)用這個對象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果錯誤是由于調(diào)用數(shù)據(jù)庫對象而產(chǎn)生的,那么可以在數(shù)據(jù)庫對象上調(diào)用這兩個方法。
2) PDO::ERRMODE_WARNING
PDO::ERRMODE_WARNING 模式除了會設(shè)置錯誤碼之外,PDO 還將發(fā)出一條傳統(tǒng)的 E_WARNING 信息。在調(diào)試/測試期間如果只是想看看發(fā)生了什么問題,而不中斷程序運(yùn)行的話,可以使用該模式。
3) PDO::ERRMODE_EXCEPTION
PDO::ERRMODE_EXCEPTION 模式除了會設(shè)置錯誤碼之外,PDO 還將拋出一個 PDOException 異常類并設(shè)置它的屬性來反射錯誤碼和錯誤信息。此模式在調(diào)試期間也非常有用,因為它會有效地放大腳本中產(chǎn)生錯誤的點,從而可以非??焖俚刂赋龃a中有問題的潛在區(qū)域。
注意:如果異常導(dǎo)致腳本終止,則事務(wù)被自動回滾。
PDO 使用 SQL-92 SQLSTATE 來規(guī)范錯誤碼字符串,不同 PDO 驅(qū)動程序負(fù)責(zé)將它們的本地代碼映射為適當(dāng)?shù)?SQLSTATE 代碼。PDO::errorCode() 方法返回一個單獨的 SQLSTATE 碼。如果需要更多這個錯誤的細(xì)節(jié)信息,PDO 還提供了一個 PDO::errorInfo() 方法來返回一個包含 SQLSTATE 碼、特定驅(qū)動錯誤碼以及此驅(qū)動的錯誤字符串的數(shù)組。
異常模式另一個非常有用的作用是,相比傳統(tǒng) PHP 風(fēng)格的警告,可以更清晰地構(gòu)建自己的錯誤處理,而且比起靜默模式和顯式地檢查每種數(shù)據(jù)庫調(diào)用的返回值,異常模式需要的代碼/嵌套更少。
【示例】創(chuàng)建 PDO 實例,并設(shè)置錯誤模式。
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
除了示例中介紹的使用 PDO::setAttribute() 方法設(shè)置錯誤模式外,還可以在創(chuàng)建 PDO 實例時設(shè)置錯誤模式,如下所示:
$pdo = new PDO($dsn, $user, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
2、PDO::errorCode() 方法
PDO::errorCode() 方法用于獲取在操作數(shù)據(jù)庫句柄時所發(fā)生的錯誤代碼,這些錯誤代碼被稱為 SQLSTATE 代碼。其語法格式如下:
PDO::errorCode()
PDO::errorCode() 方法可以返回一個 SQLSTATE,一個由 5 個字母或數(shù)字組成的在 ANSI SQL 標(biāo)準(zhǔn)中定義的標(biāo)識符。 簡要地說,一個 SQLSTATE 由前面兩個字符的類值和后面三個字符的子類值組成。
【示例】通過 PDO 連接數(shù)據(jù)庫,并通過 errorCode() 方法獲取錯誤代碼。
query($sql);
echo 'errorCode 為:'.$pdo -> errorCode().'
';
foreach ($res as $key => $value) {
echo '序號:'.$value['id'].'; 姓名:'.$value['name'].'; 年齡:'.$value['age'].'; 性別:'.$value['sex'].'
';
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
運(yùn)行結(jié)果如下:
errorCode 為:00000
序號:1; 姓名:張三; 年齡:12; 性別:男
序號:2; 姓名:李四; 年齡:11; 性別:男
序號:3; 姓名:王五; 年齡:12; 性別:男
序號:4; 姓名:小明; 年齡:12; 性別:女
序號:5; 姓名:小紅; 年齡:11; 性別:女
序號:6; 姓名:小剛; 年齡:14; 性別:男
3、PDO::errorInfo() 方法
PDO::errorInfo() 方法用于獲取操作數(shù)據(jù)庫句柄時所發(fā)生的錯誤信息。其語法格式如下:
PDO::errorInfo()
errorInfo() 方法的返回值為一個數(shù)組,它包含了相關(guān)的錯誤信息。
【示例】使用 PDO 中的 query 方法完成數(shù)據(jù)查詢操作,并通過 errorInfo() 方法獲取錯誤信息。
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'select * from userr';
$res = $pdo -> query($sql);
echo 'errorInfo 為:
';
print_r($pdo -> errorInfo());
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
示例中我們查詢了一個不存在的數(shù)據(jù)庫,運(yùn)行結(jié)果為:
errorInfo 為:
Array ( [0] => 42S02 [1] => 1146 [2] => Table 'test.userr' doesn't exist )
PDO 和 PDOStatement 對象中都有 errorCode() 和 errorInfo() 方法,如果沒有任何錯誤,errorCode() 返回的是 00000;否則就會返回一些錯誤代碼。而 errorInfo() 返回的是一個數(shù)組,包括 PHP 定義的錯誤代碼和 MySQL 的錯誤代碼及錯誤信息。
本文名稱:PHPerrorCode()和errorInfo():PDO中的錯誤處理
當(dāng)前路徑:http://m.fisionsoft.com.cn/article/djpcpcd.html


咨詢
建站咨詢
