新聞中心

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


咨詢(xún)
建站咨詢(xún)
