2015-09-14 53 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