(这是经典的ASP) 我确定这只是一个逃避文本的案例,但我还没有找到任何东西。 我有一个textarea,可能包含各种各样的字符,我需要更新记录与该textarea中的任何内容,但我收到一个错误,打破我的SQL查询,我肯定是与内容相关文本区域。
所以我的SQL查询到目前为止:
"UPDATE document SET displayheading='" & _
stripillegal(request("txt_displayheading")) & _
"', displayorder=" & displayorder & _
", shortdescription='" & stripillegal(request("txt_shortdescription")) & _
"', document_note='" & request("document_note") ...blah blah blah
所以我想知道如何包含textarea以便我可以在不破坏查询的情况下更新记录?
答案 0 :(得分:1)
如果有'
这样的字符,则查询会中断,您需要先替换它们:
newStr = Replace("'", "''", request("txt_displayheading"))
在您的查询中使用newStr
变量而不是request("txt_displayheading"
答案 1 :(得分:1)
这是一种避免动态SQL并解决SQL注入潜力的方法。它使用参数化查询。这是一个SQL解决方案:
DECLARE @DisplayHeading varchar(100)
DECLARE @DisplayOrder int
DECLARE @ShortDescription varchar(100)
DECLARE @DocumentNote varchar(100)
DECLARE @command nvarchar(500)
DECLARE @params nvarchar(500)
SET @command = N'UPDATE document
SET displayheading=@DisplayHeading
, displayorder=@DisplayOrder
, shortdescription=@ShortDescription
, document_note=@DocumentNote
--...blah blah blah'
SET @params = N'@DisplayHeading varchar(100), @DisplayOrder int,
@ShortDescription varchar(100), @DocumentNote varchar(100)'
-- Assign values to user variables.
EXEC sp_executesql @command, @params, @DisplayHeading,
@DisplayOrder, @ShortDescription, @DocumentNote
以下是您可以尝试使用ADO:
cmd.CommandText = "UPDATE document " & _
"SET displayheading=@DisplayHeading, displayorder=@DisplayOrder, " & _
"shortdescription=@ShortDescription, document_note=@DocumentNote " & _
"--...blah blah blah"
cmd.Parameters.Add(New SqlParameter("@DisplayHeading", DisplayHeading))
cmd.Parameters.Add(New SqlParameter("@DisplayOrder", DisplayOrder))
cmd.Parameters.Add(New SqlParameter("@ShortDescription", ShortDescription))
cmd.Parameters.Add(New SqlParameter("@DocumentNote", DocumentNote))