2010-12-20 44 views
0

我有點擔心我的一個mysql查詢...以下查詢接收變量$ 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語句,或者首先對允許受到影響的行進行後續傳播。是這樣的:

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

這在某種程度上可能...到現在爲止我沒有找到一個解決辦法...任何幫助將是非常讚賞...非常感謝!!!!!

Saludos Sacha!

回答

0

這不是重複鍵的工作原理。 INSERT的更新部分只有在表的UNIQUE鍵或PRIMARY鍵匹配時纔會出現。 (即:UNIQUE/PRIMARY密鑰實際上是WHERE子句。)

查看完整MySQL docs瞭解更多信息。

+0

我知道了......但是ID被客戶端傳遞......所以用戶可以嘗試修改這些鍵......在我的情況下,這在某種程度上是不安全的...... – Bosh 2010-12-20 10:53:32

+0

@Bosh - 這不是MySQL的錯誤。如果您直接從查詢字符串傳入數據庫ID,那麼這就是您的設計缺陷。 (爲什麼不存儲一個獨特的文本模塊引用,並用它來代替?) – 2010-12-20 10:56:10

+0

我知道;-)由於那個設計缺陷,我正在尋找一個解決方案;-)其實我已經混淆了ID已經使它更安全,但它不是一個由於性能,最強大的algorythms ...你是什麼意思與獨特的文本模塊參考...我GOOGLE了,但沒有找到axapnation ...謝謝你! – Bosh 2010-12-20 11:02:45

相關問題