【发布时间】:2016-05-13 12:05:25
【问题描述】:
我想根据我的 $data 输入在我的数据库中动态搜索一个日期。
日期存储为日期时间,通常显示为例如:“2016-05-11”。
对于 MySql DB,我的子句是:
Select * From Table WHERE ( Table.date LIKE '$data%' )
因此,如果用户输入“20”,结果将是所有以 20 开头的日期。如果用户输入“2016-05”,结果将是所有以 2016-05 开头的日期,使我的搜索完美运行。
在 Sql Server 2008 上进行部署时,我意识到了两件事。
1) 如果我像这样使用 LIKE 函数
Select * From Table WHERE ( Table.date LIKE '%$data$%')
该函数适用于值 "2016" ,但输入值 "2016-" 时将返回 0 个结果。
2) 如果我这样使用函数 DATETIME
Select * From Table WHERE ( DATEPART(year, Table.date) LIKE(OR)= '$data')
函数将在 $data = 2016 时返回正确的值,但在 $data = '201' 时返回 nil 值,因此它不是动态的。
我做错了什么?
【问题讨论】:
-
问题出在输入验证上。如果用户可以输入
20,他们也可以输入'fred或2016-02-30。 -
我正在使用 ajax 调用,所以如果他们进入 Fred。他们不会得到结果。那不是问题吗?我说的不对吗?
标签: mysql sql sql-server-2008