2009-11-18 110 views
0

我在我的VB.NET程序中有這個MySQL查詢故障。 這裏是VB.NET查詢:MySQL查詢故障

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

這將選擇從他們進入了用戶名的用戶表中的列點。當我部署它時,它將在他們的帳戶上將點數設置爲0。出了什麼問題?我還沒有插入任何東西。

+0

如果有人在您的文本框中輸入這個內容會怎麼樣:''OR 1 = 1; - '? –

+2

或:'';更新用戶設置點= 0其中用戶名='yourname';' –

回答

2

我不確定爲什麼你的表是由選擇查詢更新的。但是我知道你正在構建你的查詢字符串都是錯誤的。你應該像這樣做,而不是:

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如何使用查詢參數是值得的! –

0

在MySQL中的字段和表格在這種情況下,一個單引號/反引號表示...

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

檢查其是否正常工作。希望能幫助到你。

+0

嘆息...看起來這個網站已經逃脫了他們的反引號和撇號....點,用戶和用戶名都用撇號或反引號括起來...... – t0mm13b

+0

我編輯了帖子來格式化代碼,以便我們可以看到反引號。 –

+0

乾杯比爾! :) – t0mm13b

2

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;--'; 
1

有沒有辦法,一個SELECT查詢可以更改存儲在數據庫中的值。這是一個只讀命令。或者這些值已經爲零,否則查詢只返回零(儘管存儲在數據庫中),否則它根本沒有返回任何行。

我猜你的查詢形式不正確,並且它沒有返回任何行。

您的VB.NET代碼中可能有一個變量,其初始值爲零,因爲它會讀取SQL查詢的結果而被重寫。當SQL查詢不返回任何行時,該變量將保留其初始零值。

所以嘗試一個實驗:初始化你的點變量爲-99或其他東西,然後再試一次。我敢打賭你的應用會顯示-99。

此外,我會假設實際在數據庫中的數據沒有改變爲零。只有你顯示的默認值爲零,因爲你的SQL查詢不起作用。

當您在調試動態SQL時,您需要查看完整的SQL查詢 - ,您可以在之後插入任何動態變量。當您盯着構建SQL查詢的VB.NET字符串表達式時,很難進行調試。這就像訪問汽車工廠來解決汽車問題。

+0

當他們登錄時,有一個像mydata.hasrows = 0的東西。你認爲這可能會影響比分嗎? – lab12

+0

如果結果沒有行,這似乎支持假設查詢沒有返回任何內容。要麼查詢出現錯誤,要麼只是不匹配數據庫中的任何內容。 –

+0

不是它的,它是在登錄時進入的hasrows函數。登錄成功後,它將檢索您帳戶上的積分。 – lab12

0

我認爲這可能有助於那些回答這個問題的人。 MYsql Column將如何爲MySQL管理中的Points設置?

+0

點列是int嗎?或者,MySql將此視爲一個標量查詢,它將返回行數並將其推入點? – t0mm13b