MySQL查询故障
我在我的VB.NET程序中有这个MySQL查询故障。 这里是VB.NET查询:MySQL查询故障
"SELECT Points FROM user WHERE Username = '" & UsernameText.Text & "';"
这将选择从他们进入了用户名的用户表中的列点。当我部署它时,它将在他们的帐户上将点数设置为0。出了什么问题?我还没有插入任何东西。
我不确定为什么你的表是由选择查询更新的。但是我知道你正在构建你的查询字符串都是错误的。你应该像这样做,而不是:
Using cn As New MySqlConnection("your connection string here"), _
cmd As New MySqlCommand("SELECT points FROM user WHERE username= @UserName")
cmd.Parameters.AddWithValue("@UserName", UsernameText.Text)
cn.Open()
''# ExecuteReader or Fill command go here, connection will be automatically closed
''# when control falls out of the using block, even if an exception is thrown
End Using
+1我不确定SQL注入是否在这里工作,但是显示OP如何使用查询参数是值得的! –
2的可能性,我可以看到:
- 一些其他的代码正在更新分值
- SQL注入:
如果UsernameText.Text值
blah'; update user set points = 0;--
然后生成的SQL将为:
SELECT Points FROM user where Username = 'blah'; update user set points = 0;--';
有没有办法,一个SELECT
查询可以更改存储在数据库中的值。这是一个只读命令。或者这些值已经为零,否则查询只返回零(尽管存储在数据库中),否则它根本没有返回任何行。
我猜你的查询形式不正确,并且它没有返回任何行。
您的VB.NET代码中可能有一个变量,其初始值为零,因为它会读取SQL查询的结果而被重写。当SQL查询不返回任何行时,该变量将保留其初始零值。
所以尝试一个实验:初始化你的点变量为-99或其他东西,然后再试一次。我敢打赌你的应用会显示-99。
此外,我会假设实际在数据库中的数据没有改变为零。只有你显示的默认值为零,因为你的SQL查询不起作用。
当您在调试动态SQL时,您需要查看完整的SQL查询 - ,您可以在之后插入任何动态变量。当您盯着构建SQL查询的VB.NET字符串表达式时,很难进行调试。这就像访问汽车工厂来解决汽车问题。
我认为这可能有助于那些回答这个问题的人。 MYsql Column将如何为MySQL管理中的Points设置?
点列是int吗?或者,MySql将此视为一个标量查询,它将返回行数并将其推入点? – t0mm13b
如果有人在您的文本框中输入这个内容会怎么样:''OR 1 = 1; - '? –
或:'';更新用户设置点= 0其中用户名='yourname';' –