MySQL查询故障

问题描述:

我在我的VB.NET程序中有这个MySQL查询故障。 这里是VB.NET查询:MySQL查询故障

"SELECT Points FROM user WHERE Username = '" & UsernameText.Text & "';" 

这将选择从他们进入了用户名的用户表中的列点。当我部署它时,它将在他们的帐户上将点数设置为0。出了什么问题?我还没有插入任何东西。

+0

如果有人在您的文本框中输入这个内容会怎么样:''OR 1 = 1; - '? –

+2

或:'';更新用户设置点= 0其中用户名='yourname';' –

我不确定为什么你的表是由选择查询更新的。但是我知道你正在构建你的查询字符串都是错误的。你应该像这样做,而不是:

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

+1我不确定SQL注入是否在这里工作,但是显示OP如何使用查询参数是值得的! –

在MySQL中的字段和表格在这种情况下,一个单引号/反引号表示...

"SELECT `Points` FROM `user` WHERE `Username`= '" & UsernameText.Text & "';" 

检查其是否正常工作。希望能帮助到你。

+0

叹息...看起来这个网站已经逃脱了他们的反引号和撇号....点,用户和用户名都用撇号或反引号括起来...... – t0mm13b

+0

我编辑了帖子来格式化代码,以便我们可以看到反引号。 –

+0

干杯比尔! :) – t0mm13b

2的可能性,我可以看到:

  1. 一些其他的代码正在更新分值
  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字符串表达式时,很难进行调试。这就像访问汽车工厂来解决汽车问题。

+0

当他们登录时,有一个像mydata.hasrows = 0的东西。你认为这可能会影响比分吗? – lab12

+0

如果结果没有行,这似乎支持假设查询没有返回任何内容。要么查询出现错误,要么只是不匹配数据库中的任何内容。 –

+0

不是它的,它是在登录时进入的hasrows函数。登录成功后,它将检索您帐户上的积分。 – lab12

我认为这可能有助于那些回答这个问题的人。 MYsql Column将如何为MySQL管理中的Points设置?

+0

点列是int吗?或者,MySql将此视为一个标量查询,它将返回行数并将其推入点? – t0mm13b