1

FOREIGN KEYデータベースのエラーを処理するための最良の方法はどれINSERTですか?

  1. 以前INSERTのPHP:SELECT外部キーの一致をチェックする追加のクエリ()をロードしますか?

  2. MySQLにエラーを発生させ、PDOに例外をスローさせますか?

  3. より多くのオプションがありますか?

スピード/エレガンス/再利用可能なコードなどと比較してください。

4

3 に答える 3

1

時々1)はオプションではありません。会議に出席する人がいると想像してください。PeopleMeetingsテーブル(MからNへの関連付け)がある場合、SELECTを実行してからINSERTを実行することはできません... b / c SELECTを実行して、PersonとMeetingの両方が存在することを確認すると、別のプロセスが実行される可能性があります。会議を削除すると、INSERTを実行します。これは、会議が存在しなくなったために失敗します。

これが私が常に2)を行う理由です...明らかに、会議が存在しない場合は、ページをロードする前にSELECTを実行して、現在システム上にある会議をユーザーに表示しますが、2)を実行することは必須です。

言うまでもなく、(私の例では)さらに2つのクエリを実行する必要はありません。1つはPeopleに対して、もう1つはMeetingに対してです。 2つのSELECTクエリを実行した場合に実行されます)

また、トランザクションを使用する必要があります...データベースで変更を行っていて、このINSERTが失敗した場合、トランザクションはロールバックされ、データベースは一貫性のない状態のままになりません。

于 2012-04-11T15:48:29.880 に答える
1

データベースにアクセスする前に、可能性があると認識しているエラーをチェックすることは常に理にかなっているため、オプション1が最善の策だと思います。また、よりユーザーフレンドリーなエラーレポートを提供します。

于 2012-04-11T15:47:55.637 に答える
0

「ユーザーフレンドリー」で有用なエラーメッセージを表示したくない場合は、1と言います。

もちろん、答えはあなたの文脈に依存します...

于 2012-04-11T15:45:36.023 に答える