2016-03-30 17 views
0

データベース行が存在しない場合にtry-catchブロックを使用してExceptionsをスローする練習を行っています。ここ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

関連する問題