2011-04-23 66 views
0

我設置了一個編輯器,進入它的內容到數據庫,然後我可以retrive並對其進行編輯並再次保存它,這是我用什麼:爲什麼這個代碼不會工作

string user = Page.User.Identity.Name; 

    MySqlConnection conn = new MySqlConnection(@"connection string;"); 
    MySqlCommand cmd = new MySqlCommand("UPDATE copy SET cv='" + '"' + Editor1.Content.Replace("'", "''") + '"' + "' WHERE id = '" + user + "' ", conn); 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 

    conn.Close(); 

插入和選擇工作正常,但更新沒有,它不會給出錯誤,但它不會改變內容(不管我改變它總是保持相同的內容);

我知道,這是開放的SQL注入和我應該切換到參數化查詢,我將做的事情工作

只是後我使用asp.net 3.5中,MySQL 5.0

我已經發現的問題,使與它 一個新的問題謝謝大家的幫助

+0

呵呵......嗅到[代碼注入](http://en.wikipedia.org/wiki/Code_injection#SQL_injection)不是我們嗎? – 2011-04-23 11:38:17

+0

請放一個斷點告訴我,如果'Editor1.Content'是你想要的更新值,並告訴我''user'的值。 – 2011-04-23 14:23:21

+0

@just_name我試過一個斷點,由於某種原因編輯器的內容總是空的,雖然它的內容爲 – Wahtever 2011-04-23 18:07:38

回答

0

爲什麼它不起作用並不重要,這顯然是錯誤的。

您對SQL injection attacks開放,這應該是您的首要關注。

您解決這個問題通過使用參數代替,像這樣:

MySqlCommand cmd = new MySqlCommand("UPDATE copy SET cv=?cv WHERE id = ?id", conn); 
cmd.Parameters.AddWithValue("cv", Editor1.Content); 
cmd.Parameters.AddWithValue("id", user); 
+0

謝謝我實際上要切換到參數化查詢,但在我得到的東西工作 – Wahtever 2011-04-23 11:38:44

+0

你實際上使用連接字符串如圖所示?即。 *裏面的字符串? – 2011-04-23 11:39:41

+0

爲什麼你現在不嘗試參數化的方式,看看這是不是也奇蹟般地解決了你的問題? – 2011-04-23 11:40:29

0

的ExecuteNonQuery應該記住返回影響的行數,這樣,你可以調試代碼。對於我們來說,你能寫出你在字符串中生成的sql語句嗎?

除了首先想到的是,id ='user'可能不正確,id表示一個整數,但名稱看​​起來像是一個字符串值。

+0

用戶名是正確的,因爲我用它從數據庫中檢索內容 – Wahtever 2011-04-23 11:47:17