2013-03-23 5 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; '를 로그인 상자에 입력하면 어떻게됩니까? 당신은 실제로 해킹 당하고 있습니다. –

답변

-1

작은 따옴표로 묶어야 할 수있는 연결 문자열 (데이터베이스, 암호 것) 함께 할 수있는 뭔가가있을 수 있습니다 생각 :

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

은 또한을 연결 문자열을 SQL 문에 입력하면 SQL 주입 공격을받을 수 있습니다 (또는 "O'Brien"을 로그인 이름으로 사용하는 사람을 생각해보십시오). 대신 매개 변수를 항상 사용해야합니다.

+0

이 기술은 SQL injection에 취약합니다. –

+0

감사합니다 shf301, 그게 해결 됐어! –

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) 
관련 문제