2015-09-14 109 views
0

我正面臨着sql查詢中單引號輸入問題。查詢如下。單引號查詢問題

Dim query As String = "insert into users(comment) values ('" & txt_comment.Text & "')" 

它工作正常。但是,當用戶在文本框中輸入單個代碼數據時,查詢會崩潰。輸入例如「henry's」。任何人都想建議我該怎麼做?在此先感謝

+3

使用參數化查詢。這也可以防止SQL注入問題 –

+0

SQL期望所有引號都被關閉,在您的示例中沒有發生什麼。只要確保所有查詢都完全按照用戶輸入時的預期構建。順便說一句,這個特定的代碼非常適合SQL注入:在連接到服務器之前,您應該始終檢查查詢(參數化查詢,如Matt建議的,會自動處理這個問題)。 – varocarbas

+3

有人說「小鮑比表」嗎? –

回答

-4

你需要複製的報價:

Dim query As String = "insert into users(comment) values ('" & txt_comment.Text.replace("'","''") & "')" 
+0

感謝@ emoreau99問題已解決。 –

+0

這是一個可怕的解決方案,可以解決sql注入安全問題。 –

+0

我完全同意參數化查詢更好。 – emoreau99

6

USE PARAMETERISED QUERIES!!

不好意思喊,但我不能強調這是多麼重要。你給出的例子"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