PDOを使用して、データベースのWebサイトインターフェイスを書き直しています。以前はmysql拡張機能を使用していましたが、エラー処理に煩わされることはなく、基本的にコピーアンドペーストであったエラーハンドラーもいくつかありました。
今、私はこれを正しくやりたいと思います。しかし、私が望む方法でエラーをキャッチするのに問題があります(MySQLの「重複エントリ」、「ヌル値」などのエラー)。私のステートメントのどのくらいがtryブロックにある必要がありますか?すべてがそこにあるべきですか?を使用Include()
してDB(独自のエラー処理があります)に接続しているため、このコードでエラーが発生するのはクエリの実行のみです。次のコードを実行したときにエラーが発生しない理由がわかりません。
try {
$stmt = $db->prepare("INSERT INTO tbl_user (id, name, password, question, answer) VALUES (NULL, :name, :password, :question, :answer)");
$stmt->bindValue(":name", $_POST['name']);
$stmt->bindValue(":password", $_POST['password']);
$stmt->bindValue(":question", $_POST['question']);
$stmt->bindValue(":answer", $_POST['answer']);
$stmt->execute();
echo "Successfully added the new user " . $_POST['name'];
} catch (PDOException $e) {
echo "The user could not be added.<br>".$e->getMessage();
}
だから私の質問:それはすべてtryブロックにある必要がありますか?実行をtryブロックに入れることはできますか?エラーをキャッチする必要がありますDuplicate value "John" in key "name"
が、代わりに成功メッセージが表示されます。(2人の「ジョン」ユーザーを追加しようとした場合)。PHPMyAdminにチェックインしました。インデックスは一意であり、このコードを使用しないだけで、期待どおりにエラーがスローされます。