-
-
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; // 錯誤:訊息可以呼叫:errorinfo() 或pdostatement::errorinfo()來存取
- protected $message; // 異常訊息,可以試用exception::getmessage() 來存取
- protected $code; // sql狀態錯誤代碼,可以使用exception::getcode() 來存取
- }
- ?>
複製程式碼
這個異常處理類別是整合php 5內建的異常處理類。
php 5內建的異常處理類別結構:
-
-
class exception
- {
- // 屬性
- protected $message = 'unknnowmes;例外資訊
- 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 = 'mysql';
- $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 = 'mysql';
- $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());
- ?>
複製程式碼
輸出的錯誤訊息,如下圖:
|