2013-03-23 151 views
0

我試圖在他/她註銷時從數據庫中刪除用戶名。我的代碼是以下哪個不起作用。我想這可能是與從MySQL數據庫中刪除ID

Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles Button1.Click 

    Dim Query As String 
    Dim con As MySqlConnection = New MySqlConnection("Server=localhost;User ID=root;Password=*Mypassword*;Database=myusers") 
    con.Open() 
    Query = "Delete FROM users WHERE name =" + loginuser.Text 
    'Table = users 
    'Name = Varchar(20) 
    'loginuser.text = Name (username) 
    Dim cmd As MySqlCommand = New MySqlCommand(Query, con) 
    MsgBox(Query) 
    Dim i As Integer = cmd.ExecuteNonQuery() 
    If (i > 0) Then 
     MsgBox("Record is Successfully Deleted") 
    Else 
     MsgBox("Record is not Deleted") 
    End If 
    con.Close() 
End Sub 
+1

如果我在登錄框中輸入'''; DROP TABLE users''會發生什麼?你實際上乞求被黑客入侵。 – 2013-03-23 04:14:23

回答

-1

的字符串文字必須用單引號連接字符串(數據庫,密碼的事情),所以您的查詢應該是:

Query = "Delete FROM users WHERE name = '" + loginuser.Text + "'" 

另外串接一個將字符串轉換爲SQL語句會打開SQL注入攻擊(甚至可能只是想着某人將「O'Brien」作爲登錄名)。您應該始終使用參數。

+0

這種技術容易受到sql注入的影響。 – 2013-03-23 04:14:47

+0

謝謝shf301,修復它! – 2013-03-23 04:16:24

1

你是不是在你的SQL字符串引號引起名稱值, 例如:Delete FROM users WHERE name = 'abcname'

更改代碼中使用的參數是乾淨和安全的方式來傳遞的價值觀和你不必擔心行情當使用字符串參數時

Query = "Delete FROM users WHERE name = @name" 
Dim cmd As MySqlCommand = New MySqlCommand(Query, con) 
MySqlCommand.Parameters.AddWithValue("@name",loginuser.Text)