- try {
- $db = new pdo('mysql:host=localhost;dbname=test', $user, $pass);
- $db = null;
- } catch (pdoexception $e) {
- print "error: " . $e->getmessage() . "
";
- die();
- }
- ?>
複製代碼這裡利用php 5物件導向的異常處理特徵,如果裡面有異常的話就初始化調用pdoexception來初始化一個異常類。 pdoexception異常類的屬性結構:
- class pdoexception extends exception
- {
- public $errorinfo = null; // 錯誤資訊,可以調用 pdo::errorinfo() 或 pdostatement::errorinfo()來訪問
- protected $message; // 異常資訊,可以試用 exception::getmessage() 來訪問
- protected $code; // sql狀態錯誤碼,可以使用 exception::getcode() 來訪問
- }
- ?>
複製代碼這個異常處理類是整合php 5內建的異常處理類。php 5內建的異常處理類結構:
- class exception
- {
- // 屬性
- protected $message = 'unknown exception'; // 異常資訊
- protected $code = 0; // 使用者自訂異常代碼
- protected $file; // 發生異常的檔案名稱
- protected $line; // 發生異常的程式碼號
- // 方法
- final function getmessage(); // 返回異常資訊
- final function getcode(); // 返回異常代碼
- final function getfile(); // 返回傳生異常的檔案名稱
- final function getline(); // 返回傳生異常的程式碼號
- final function gettrace(); // backtrace() 數組
- final function gettraceasstring(); // 已格成化成字串的 gettrace() 資訊
- }
- ?>
複製代碼相應的,在代碼中可以合適的調用 getfile() 和 getline() 來進行錯誤定位,更方便的進行調試。 使用面向過程的方法 代碼:
- $db = new pdo('mysql:host=localhost;dbname=test', $user, $pass);
- $rs = $db->query("select aa,bb,cc from foo");
- if ($db->errorcode() != '00000'){
- print_r($db->errorinfo());
- exit;
- }
- $arr = $rs->fetchall();
- print_r($arr);
- $db = null;
- ?>
複製代碼pdo和pdostatement對象有errorcode() 和 errorinfo() 方法,如果沒有任何錯誤, errorcode() 返回的是: 00000 ,否則就會返回一些錯誤碼。errorinfo() 返回的一個數組,包括php定義的錯誤碼和mysql的錯誤碼和錯誤資訊,數組結構如下: array ( [0] => 42s22 [1] => 1054 [2] => unknown column 'aaa' in 'field list' ) 每次執行查詢以後,errorcode() 的結果都是最新的,所以我們可以很容易自己控制錯誤資訊顯示。 在使用pdo進行那個php和資料庫開發過程中,如果再碰到錯誤咋辦?按照上面的方式處理吧。 11.3.4 pdo的錯誤處理 pdo提供了兩個獲得程式中的錯誤資訊的方法,一個是errorcode()方法;另一個是errorinfo()方法。 1.errorcode()方法 errorcode()方法用於擷取在操作資料庫控制代碼時所發生的錯誤碼,這些錯誤碼被稱為sqlstate代碼,該方法的文法格式如下: 01 string errorcode ( void ) errorcode()方法的傳回值為一個sqlstate,sqlstate是由5個數字和字母組成的代碼。 使用errorcode()方法的樣本:
- $dsn = 'mysql:dbname=shop;host=localhost';
- $user_name = 'root';
- $user_psw = 'root';
- $pdo = new pdo($dsn, $user_name, $user_psw);
- $pdo->exec("update mytable set age=28 where id=1 ");//表mytable不存在
- echo "errorcode為: ".$pdo->errorcode();
- ?>
-
複製代碼輸出的錯誤碼,如: 2.errorinfo()方法 errorinfo()方法用於獲得操作資料庫控制代碼時所發生的錯誤資訊,該方法的文法格式如下: 01 array errorinfo ( void ) errorinfo()方法的傳回值為一個數組,該數組裡麵包含了相關的錯誤資訊。 使用errorinfo()方法:
- $dsn = 'mysql:dbname=shop;host=localhost';
- $user_name = 'root';
- $user_psw = 'root';
- $pdo = new pdo($dsn, $user_name, $user_psw);
- $pdo->exec("update mytable set age=28 where id=1 ");//表mytable不存在
- echo "errorinfo為: ";
- print_r($pdo->errorinfo());
- ?>
複製代碼輸出的錯誤資訊,如: |