2016-03-30 44 views
0

我正在研究一個涉及如果數據庫行不存在時使用try-catch塊來引發異常的練習。這裏有一個read()函數的例子:使用PDO連接的try-catch塊中的PHP數據庫錯誤處理

class Manager { 
    private $desc; 
    private $id; 
    private $newDesc; 
    public function read($id) { 
     $db = new PDO('mysql:host=localhost; dbname=database', 'root', ''); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     try { 
      $sql = "SELECT * FROM table where `id` = :id_val"; 
      $query = $db->prepare($sql); 
      $query->bindParam(":id_val", $id); 
      $query->execute(); 
      $results = $query->fetchAll(PDO::FETCH_ASSOC); 
     } catch (Exception $e) { 
      echo "Could not return specified row! <br />"; 
      echo $e->getMessage(); 
     } 
     echo "<pre>"; 
     print_r($results); 
     echo "</pre>"; 
    } 
} 

類外我運行:

$manager = new Manager(); 
$manager->read(44); // this is an id that IS NOT an existing record 

我的瀏覽器顯示Array()
我是把錯誤的語句轉換成在try-catch,或者是別的東西共?

+0

具有空結果集不會被捕獲,只需單獨處理 – Ghost

+0

「異常如果數據庫行不存在」 - 您將不得不拋出自己的異常,因爲它默認情況下不會拋出一個異常。 – Mike

回答

1

這是正常的行爲,「try catch」語句捕獲錯誤,異常...沒有記錄給定id不是錯誤。如果你想檢查是否有記錄,你可以計算你的結果集

count($results); 

如果這個計數大於0,它就存在。

+1

謝謝@tanaydin,我誤解了try-catch塊如何工作 – kmancusi