FOREIGN KEY
データベースのエラーを処理するための最良の方法はどれINSERT
ですか?
以前
INSERT
のPHP:SELECT
外部キーの一致をチェックする追加のクエリ()をロードしますか?MySQLにエラーを発生させ、PDOに例外をスローさせますか?
より多くのオプションがありますか?
スピード/エレガンス/再利用可能なコードなどと比較してください。
FOREIGN KEY
データベースのエラーを処理するための最良の方法はどれINSERT
ですか?
以前INSERT
のPHP:SELECT
外部キーの一致をチェックする追加のクエリ()をロードしますか?
MySQLにエラーを発生させ、PDOに例外をスローさせますか?
より多くのオプションがありますか?
スピード/エレガンス/再利用可能なコードなどと比較してください。
時々1)はオプションではありません。会議に出席する人がいると想像してください。PeopleMeetingsテーブル(MからNへの関連付け)がある場合、SELECTを実行してからINSERTを実行することはできません... b / c SELECTを実行して、PersonとMeetingの両方が存在することを確認すると、別のプロセスが実行される可能性があります。会議を削除すると、INSERTを実行します。これは、会議が存在しなくなったために失敗します。
これが私が常に2)を行う理由です...明らかに、会議が存在しない場合は、ページをロードする前にSELECTを実行して、現在システム上にある会議をユーザーに表示しますが、2)を実行することは必須です。
言うまでもなく、(私の例では)さらに2つのクエリを実行する必要はありません。1つはPeopleに対して、もう1つはMeetingに対してです。 2つのSELECTクエリを実行した場合に実行されます)
また、トランザクションを使用する必要があります...データベースで変更を行っていて、このINSERTが失敗した場合、トランザクションはロールバックされ、データベースは一貫性のない状態のままになりません。
データベースにアクセスする前に、可能性があると認識しているエラーをチェックすることは常に理にかなっているため、オプション1が最善の策だと思います。また、よりユーザーフレンドリーなエラーレポートを提供します。
「ユーザーフレンドリー」で有用なエラーメッセージを表示したくない場合は、1と言います。
もちろん、答えはあなたの文脈に依存します...