首頁  >  文章  >  後端開發  >  php中pdo錯誤處理方法詳解

php中pdo錯誤處理方法詳解

WBOY
WBOY原創
2016-07-25 08:54:381026瀏覽
  1. try {
  2.  $db = new pdo('mysql:host=localhost;dbname=test', $user, $pass) ;
  3.  $db = null;
  4. } catch (pdoexception $e) {
  5.  print "error: " . $e->getmessage() . "
    ";
  6.  die() ;
  7. }
  8. ?>
複製程式碼

這裡利用php 5物件導向的異常處理特徵,如果裡面有異常的話就初始化呼叫pdoexception來初始化一個異常類別。

pdoexception異常類別的屬性結構:

  1. class pdoexception extends exception
  2. {
  3.  public $errorinfo = null; // 錯誤:訊息可以呼叫:errorinfo() 或pdostatement::errorinfo()來存取
  4.  protected $message; // 異常訊息,可以試用exception::getmessage() 來存取
  5.  protected $code; // sql狀態錯誤代碼,可以使用exception::getcode() 來存取
  6. }
  7. ?>
複製程式碼

這個異常處理類別是整合php 5內建的異常處理類。 php 5內建的異常處理類別結構:

  1. class exception
  2. {
  3.  // 屬性
  4.  protected $message = 'unknnowmes;例外資訊
  5.  protected $code = 0; // 使用者自訂異常碼
  6.  protected $file; // 發生異常的檔案名稱
  7.  protected $line; // 發生異常的程式碼行號
  8. // 方法
  9.  final function getmessage(); // 返回異常信息
  10.  final function getcode(); // 返回異常代碼
  11.  final function getfile(); // 返回發生異常的文件名
  12.  final function getline(); // 傳回異常發生的程式碼行號
  13.  final function gettrace(); // backtrace() 陣列
  14.  final function gettraceasstring(); // 已化成化成的字串gettrace () 訊息
  15. }
  16. ?>
複製程式碼

對應的,在程式碼中可以合適的呼叫getfile() 和getline() 來進行錯誤定位,更方便的進行除錯。 使用過程導向的方法 代碼:

  1. $db = new pdo('mysql:host=localhost;dbname=test', $user, $pass);
  2. $rs = $db->query("select aa,bb,cc from foo");
  3. if ($db->e​​rrorcode() != '00000'){
  4.  print_r($db-> errorinfo());
  5.  exit;
  6. }
  7. $arr = $rs->fetchall();
  8. print_r($arr);
  9. $db = null;
  10. ?>
複製程式碼

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()方法的範例:

  1. $dsn = 'mysql:dbname=shop;host=localhost';
  2. $user_name = 'mysql';
  3. $user_psw = 'root';
  4. $pdo = new pdo($dsn, $user_name, $user_psw);
  5. $pdo->exec("update mytable set age=28 where id=1 ") ;//表mytable不存在
  6. echo "errorcode為: ".$pdo->errorcode();
  7. ?>
複製代碼

輸出的錯誤碼,如下圖:

php pdo错误处理

2. errorinfo()方法

errorinfo()方法用於獲得操作資料庫句柄時所發生的錯誤訊息,該方法的語法格式如下:

01 array errorinfo ( void ) errorinfo()方法的回傳值為一個數組,該數組裡麵包含了相關的錯誤訊息。

使用errorinfo()方法:

  1. $dsn = 'mysql:dbname=shop;host=localhost';
  2. $user_name = 'mysql';
  3. $user_psw = 'root';
  4. $pdo = new pdo($dsn, $user_name, $user_psw);
  5. $pdo->exec("update mytable set age=28 where id=1 ") ;//表mytable不存在
  6. echo "errorinfo為: ";
  7. print_r($pdo->errorinfo());
  8. ?>
複製程式碼

輸出的錯誤訊息,如下圖: php pdo错误处理



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn