2013-03-23 145 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)