2010-12-20 13 views
0

私は自分のmysqlクエリの1つを気にしています...次のクエリは変数$ DB_idを受け取ります...その主キーを持つ行が既に存在する場合、クエリは更新を実行します。DUPLICATE KEY UPDATE ... WHEREまたはsubselectionを使用していますか?

$this->db->query(" INSERT INTO   modules_text 
              ( module_id, 
               module_content, 
               module_index 
              ) 

         VALUES    ( '{$DB_id}', 
               '{$content['text']}', 
               '{$index}' 
              ) 

         ON DUPLICATE KEY 
         UPDATE   module_content = '{$content['text']}', 
             module_index  = '{$index}' 

        "); 

今のところ、影響を受ける行が実際にユーザーに属しているかどうかは関係ありません。私は、UPDATE部分にwhereステートメントを追加したい、あるいは最初に影響を受けることが許されている行のsubseptionを作成したいと思います。以下のようなもの:

[...] 
      ON DUPLICATE KEY 
      UPDATE   module_content = '{$content['text']}', 
          module_index  = '{$index}' 
      WHERE   module_post_id = '{$post]}' 

今まで、私は解決策を見つけるdidntの...これ何とか可能です...すべてのヘルプは非常にたくさんありがとう...いただければ幸いです!!!!!

Saludosサシャ!

答えて

0

これはどのようにDUPLICATE KEY作品ONではありません。 INSERTの更新部分は、テーブルのUNIQUEキーまたはPRIMARYキーに一致するものがある場合にのみ発生します。 (すなわち:UNIQUE/PRIMARY KEY(S)を効果的にWHERE句である。)

詳細については完全MySQL docsを参照してください。

+0

私は知っています...しかし、IDはクライアントによって渡されます...ユーザーはそれらのキーを変更しようとする可能性があります...私の場合、これは何とか安全ではありません... – Bosh

+0

@Bosh - それはMySQLsの欠陥ではありません。クエリ文字列からデータベースIDを直接渡しているのであれば、それはあなたの設計上の欠陥です。 (なぜユニークなテキストモジュールの参照を格納していないし、代わりにそれを使用?) –

+0

私は実際に私はそれをより安全にするために、すでにIDを難読化しますが、そのない1 ;-)ので、私は解決策を探しています、その設計上の欠陥の;-)知っていますパフォーマンスのために最も強いalgorythmsの...あなたは一意のテキストモジュールリファレンスでどういう意味ですか...私はグーグルではありませんでしたが、Axplanationを見つけませんでした...ありがとう! – Bosh

関連する問題