我正面臨着sql查詢中單引號輸入問題。查詢如下。單引號查詢問題
Dim query As String = "insert into users(comment) values ('" & txt_comment.Text & "')"
它工作正常。但是,當用戶在文本框中輸入單個代碼數據時,查詢會崩潰。輸入例如「henry's」。任何人都想建議我該怎麼做?在此先感謝
我正面臨着sql查詢中單引號輸入問題。查詢如下。單引號查詢問題
Dim query As String = "insert into users(comment) values ('" & txt_comment.Text & "')"
它工作正常。但是,當用戶在文本框中輸入單個代碼數據時,查詢會崩潰。輸入例如「henry's」。任何人都想建議我該怎麼做?在此先感謝
你需要複製的報價:
Dim query As String = "insert into users(comment) values ('" & txt_comment.Text.replace("'","''") & "')"
不好意思喊,但我不能強調這是多麼重要。你給出的例子"Henry's"
實際上是一個馴服的例子,只會導致查詢失敗。有人可以輸入"Henry'; DROP TABLE users;--"
,現在你已經失去了你的用戶表。
即使您有限制輸入,例如下拉列表,仍然應該使用參數化查詢,因爲它們允許更強大的鍵入,並且還允許從緩存中使用查詢計劃。
我沒有用VB.NET裏來,所以請原諒任何語法錯誤,但我想你想要的東西,如:
Dim query As String = "insert into users(comment) values (@Comment);"
Using connection As New SqlConnection("Your Connection String")
Using command As New SqlCommand(query, connection)
command.Parameters.Add("@Comment", SqlDbType.VarChar, 255).Value = txt_comment.Text
command.ExecuteNonQuery()
End Using
End Using
使用參數化查詢。這也可以防止SQL注入問題 –
SQL期望所有引號都被關閉,在您的示例中沒有發生什麼。只要確保所有查詢都完全按照用戶輸入時的預期構建。順便說一句,這個特定的代碼非常適合SQL注入:在連接到服務器之前,您應該始終檢查查詢(參數化查詢,如Matt建議的,會自動處理這個問題)。 – varocarbas
有人說「小鮑比表」嗎? –