69pao国产精品视频-久久精品一区二区二三区-精品国产精品亚洲一本大道-99国产综合一区久久

PHP PDO 錯(cuò)誤與錯(cuò)誤處理

PHP PDO 錯(cuò)誤與錯(cuò)誤處理

PHP PDO 參考手冊(cè)PHP PDO 參考手冊(cè)

  • PDO::ERRMODE_SILENT

    此為默認(rèn)模式。 PDO 將只簡(jiǎn)單地設(shè)置錯(cuò)誤碼,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法來(lái)檢查語(yǔ)句和數(shù)據(jù)庫(kù)對(duì)象。如果錯(cuò)誤是由于對(duì)語(yǔ)句對(duì)象的調(diào)用而產(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è)方法。

  • PDO::ERRMODE_WARNING

    除設(shè)置錯(cuò)誤碼之外,PDO 還將發(fā)出一條傳統(tǒng)的 E_WARNING 信息。如果只是想看看發(fā)生了什么問(wèn)題且不中斷應(yīng)用程序的流程,那么此設(shè)置在調(diào)試/測(cè)試期間非常有用。

  • PDO::ERRMODE_EXCEPTION

    除設(shè)置錯(cuò)誤碼之外,PDO 還將拋出一個(gè) PDOException 異常類并設(shè)置它的屬性來(lái)反射錯(cuò)誤碼和錯(cuò)誤信息。此設(shè)置在調(diào)試期間也非常有用,因?yàn)樗鼤?huì)有效地放大腳本中產(chǎn)生錯(cuò)誤的點(diǎn),從而可以非常快速地指出代碼中有問(wèn)題的潛在區(qū)域(記住:如果異常導(dǎo)致腳本終止,則事務(wù)被自動(dòng)回滾)。

    異常模式另一個(gè)非常有用的是,相比傳統(tǒng) PHP 風(fēng)格的警告,可以更清晰地構(gòu)建自己的錯(cuò)誤處理,而且比起靜默模式和顯式地檢查每種數(shù)據(jù)庫(kù)調(diào)用的返回值,異常模式需要的代碼/嵌套更少。

創(chuàng)建 PDO 實(shí)例并設(shè)置錯(cuò)誤模式

<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try {     $dbh = new PDO($dsn, $user, $password);     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) {     echo 'Connection failed: ' . $e->getMessage(); } ?><button class="copy-code-button" type="button" data-clipboard-text="<?php $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?> "></button>

注意: 不管當(dāng)前是否設(shè)置了 PDO::ATTR_ERRMODE ,如果連接失敗,PDO::__construct() 將總是拋出一個(gè) PDOException 異常。未捕獲異常是致命的。

創(chuàng)建 PDO 實(shí)例并在構(gòu)造函數(shù)中設(shè)置錯(cuò)誤模式

<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /*
    使用 try/catch 圍繞構(gòu)造函數(shù)仍然有效,即使設(shè)置了 ERRMODE 為 WARNING,
    因?yàn)槿绻B接失敗,PDO::__construct 將總是拋出一個(gè)  PDOException 異常。
*/ try {     $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) {     echo 'Connection failed: ' . $e->getMessage();     exit; } // 這里將導(dǎo)致 PDO 拋出一個(gè) E_WARNING 級(jí)別的錯(cuò)誤,而不是 一個(gè)異常 (當(dāng)數(shù)據(jù)表不存在時(shí)) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?><button class="copy-code-button" type="button" data-clipboard-text="<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 try/catch 圍繞構(gòu)造函數(shù)仍然有效,即使設(shè)置了 ERRMODE 為 WARNING, 因?yàn)槿绻B接失敗,PDO::__construct 將總是拋出一個(gè) PDOException 異常。 */ try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } // 這里將導(dǎo)致 PDO 拋出一個(gè) E_WARNING 級(jí)別的錯(cuò)誤,而不是 一個(gè)異常 (當(dāng)數(shù)據(jù)表不存在時(shí)) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?> "></button>

以上例程會(huì)輸出:

Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in
/tmp/pdo_test.php on line 18
add a note add a note<button class="copy-code-button" type="button" data-clipboard-text="Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note "></button>

PHP PDO 參考手冊(cè)PHP PDO 參考手冊(cè)

相關(guān)文章