【发布时间】:2011-09-28 15:22:26
【问题描述】:
我在 ASP/C# 中设计了一个基本搜索,用于搜索数据库中的记录,并为用户提供了可用于搜索的以下字段:word/phrase、dateFrom、dateTill。因此分别输入“Hello, World!”, 05/25/2009, 06/25/2009 将搜索到内容为“Hello, World!”的数据库记录。这是在给定日期之间创建的。很简单的东西。
用户在字段中输入的文本直接注入如下 SQL 语句:
SELECT r.idRecord, r.recordText
FROM record r
WHERE LOWER(CAST(r.recordText AS VARCHAR)) LIKE LOWER('%" + word/phrase + "%')
AND r.creationDate BETWEEN '" + dateFrom + "' AND '" + dateTill + "'"
所以仍然非常简单,当用户以美国格式输入日期时,它就像一个魅力,mm/dd/yyyy。但是,当输入英国格式的日期(例如 25/05/2009)时,它会失败。终于……
SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY]
...不是特别有用,因为我不想选择日期,可以在 WHERE 子句中使用类似的语句吗?
感谢您的帮助。
【问题讨论】:
-
附带说明:您应使用参数化 SQL。永远不要使用字符串连接来创建 SQL 语句。