0
我使用传统的ASP与参数化的SQL查询字符串如下:传统ASP SQL参数化 - 如何从参数中删除单引号?
SQL = "SELECT * FROM content WHERE Category LIKE ? ORDER BY SubDate ?"
SQL查询字符串在下面的参数代码中使用了:
Set cmd = Server.CreateObject("ADODB.Command")
Set rsView = Server.CreateObject("ADODB.Recordset")
cmd.ActiveConnection = MM_connContent_STRING
cmd.Prepared = true
cmd.CommandType = adCmdText
cmd.CommandText = SQL
cmd.CommandTimeout = 60
cmd.Parameters.Append(cmd.CreateParameter("Category", 202, adParamInput, 30, qFilter))
cmd.Parameters.Append(cmd.CreateParameter("SubDate", 202, adParamInput, 10, myDateSort))
rsView.CursorLocation = adUseClient
rsView.Open cmd, , adOpenForwardOnly, adLockReadOnly
的代码,除了一个以上的伟大工程大问题。 “ORDER BY SubDate?”部分输出“ORDER BY SubDate'DESC'”其中DESC由于它是一个参数而添加了单引号。在运行上面的代码时,由于DESC(也可以是ASC,取决于用户通过URL查询字符串选择和发送的内容)的单引号,我得到了一个错误的语法错误。看起来所有的SQL参数都是用单引号输出的。如何从特定的SQL参数中删除单引号,以便它们不会在SQL字符串中创建语法错误?
+1尼斯务实又安全的解决方案,得到我的投票。 – AnthonyWJones 2012-07-17 10:04:02
感谢您的快速回复。我试图通过去参数化查询来避免SQL注入。由于myDateSort是通过URL字符串传递的用户定义变量,我相信如果我直接在代码中显示的参数外使用myDateSort变量,用户仍然可以修改我的SQL查询。它是否正确?再次感谢! – user1531027 2012-07-17 15:38:08
实际上,现在我看到我们正在使用If函数控制分配给myDateSort的值。我想这会保持价值的安全。 – user1531027 2012-07-17 15:40:17