2

SQLコマンドを簡単に管理するためのクラスを作成しています。私はすべての CRUD を作成し、現在、save ($ data, $ table) という新しいメソッドを作成しようとしています。「save」は、INSERT または UPDATE が文であるかどうかを認識しなければなりません。

このステップで完全に道に迷ってしまいました。私の脳は、2 つの文のどちらが正しいかを認識するための安全で効果的な方法を認識していません。

私の最初のアイデアは、主キーを使用して比較することでした...

値が存在します: 更新

値が存在しないか空: 挿入

しかし、これは弱い解決策です。たとえば、悪意のあるユーザーがフォームで ID=5 を送信した場合、ユーザーを ID 5 で自動的に上書きします。

私は提案と解決策を受け入れます、ありがとう!

4

1 に答える 1

3

答えへの2つの部分:

  1. 必要なSQLは

    INSERT(fields) VALUES() ON DUPLICATE KEY UPDATE...

  2. 制御する方法は、ID ではなく、他の一意の識別子を送信することです。テーブルには、主キー (自動インクリメント) と、テーブル内の一意のキーとして設定された "unique_id" ランダム文字列 md5() があります。ランダムな文字列を識別子として送信します。次に、そのランダムな文字列に基づいて更新を行います。存在しない場合は、新しいレコードが作成され、主キーが自動インクリメントされます。

「新しい」または「更新」を期待している場合は、これよりも深く検証しますが、この方法はあなたが求めているものに合っているようです.

于 2012-08-28T04:21:10.847 に答える