我在我的VB.NET程序中有這個MySQL查詢故障。 這裏是VB.NET查詢:MySQL查詢故障
"SELECT Points FROM user WHERE Username = '" & UsernameText.Text & "';"
這將選擇從他們進入了用戶名的用戶表中的列點。當我部署它時,它將在他們的帳戶上將點數設置爲0。出了什麼問題?我還沒有插入任何東西。
我在我的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的可能性,我可以看到:
如果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';' –