1

无法弄清楚我的代码出了什么问题。我想从 mysql 数据库中检索一个 sha256 密钥。

keys table:
Id(int 4)    |  key (varchar64) 
1            |  5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

myAdapter.Fill(mydataatable) 行不断向我抛出错误

MySql.Data.MySqlClient.MySqlException 未处理
ErrorCode=-2147467259 消息=您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“keys WHERE id = 1”附近使用正确的语法

这是完整的错误日志: http: //pastebin.com/EG4GfywA

这是我的代码,我从 youtube 上学到的...

  Dim connectDatabase As New MySqlConnection("Server=localhost;User Id=root;Password=testing123;Database=flag15")
    If TextBox1.Text = "" Then
        MessageBox.Show("Please input a user id", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
        Dim myAdapter As New MySqlDataAdapter("SELECT * FROM keys WHERE id= " & TextBox1.Text, connectDatabase)
        Dim mydataatable As New DataTable
        myAdapter.Fill(mydataatable)
        If mydataatable.Rows.Count > 0 Then
            Label4.Text = mydataatable.Rows(0).Item("key")
        Else
            MessageBox.Show("User ID is not found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox1.Text = ""
            Label4.Text = ""
        End If
    End If
4

2 回答 2

0

对我来说似乎是正确的。尝试添加“;” 在查询结束时。

Dim myAdapter As New MySqlDataAdapter("SELECT * FROM keys WHERE id=" & Integer.parse(Trim(TextBox1.Text))+";", connectDatabase)

我添加了一个修剪和整数解析,以防您传递更多空白字符。

尝试记录并发布您正在运行的最终查询。

于 2013-05-08T15:10:40.003 回答
0

我假设您需要在WHERE id= .... 但是,您对sql-injection 持开放态度。不要连接你的 sql 字符串,而是使用 sql 参数。

Using con = New MySqlConnection("Server=localhost;User Id=root;Password=testing123;Database=flag15")
    Using myAdapter = New MySqlDataAdapter("SELECT * FROM keys WHERE id=@id", con)
        myAdapter.SelectCommand.Parameters.AddWithValue("@id", TextBox1.Text)
        Dim mydataatable As New DataTable
        myAdapter.Fill(mydataatable)
        '...'
    End Using
End Using
于 2013-05-08T15:13:20.697 回答