php中pdo錯誤處理方法詳解

來源:互聯網
上載者:User
  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; // 錯誤資訊,可以調用 pdo::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 = 'unknown exception'; // 異常資訊
  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->errorcode() != '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 = 'root';
  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. ?>
複製代碼

輸出的錯誤碼,如:

2.errorinfo()方法

errorinfo()方法用於獲得操作資料庫控制代碼時所發生的錯誤資訊,該方法的文法格式如下:

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

使用errorinfo()方法:

  1. $dsn = 'mysql:dbname=shop;host=localhost';
  2. $user_name = 'root';
  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. ?>
複製代碼

輸出的錯誤資訊,如:

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.