0

ログアウト時にデータベースからユーザーのユーザー名を削除しようとしています。私のコードは次のとおりですが、機能しません。接続文字列(データベース、パスワードなど)と関係があるのではないかと思います

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
4

2 に答える 2

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)
于 2013-03-23T04:10:16.127 に答える
0

文字列リテラルは一重引用符で囲む必要があるため、クエリは次のようになります。

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

また、文字列をSQLステートメントに連結すると、SQLインジェクション攻撃が発生する可能性があります(または、ログイン名として「O'Brien」を使用している人のことを考えてみてください)。代わりに、常にパラメータを使用する必要があります。

于 2013-03-23T04:07:22.610 に答える