我有一个工作的pdo集成数据库类。我的所有查询都非常有效,但当我尝试传递某个值时,我就陷入了困境。该值为:
DATE_SUB('2010-11-03', INTERVAL 30 DAY)
现在我的所有类查询工作都准备好了:
SELECT DATE(added) AS date FROM data WHERE DATE(added) <= ?
当我尝试将值DATE_SUB('2010-11-03', INETRVAL 30 DAY)
传递给execute()
函数时,没有收到任何结果(但查询正在成功执行)。
我尝试发送原始值'2010-11-03'
。它的工作正常但没有这个功能。
有人知道这个mysql函数没有被传递给执行函数吗?
答案 0 :(得分:2)
您不能使用占位符作为替换我的SQL查询的这一部分:占位符及其对应的边界值,只能对应于值。
当你传递2010-11-03
时,你传递了一个值 - 所以它有效。
当您尝试传递DATE_SUB('2010-11-03', INTERVAL 30 DAY)
时,它不是值 - 因此它不起作用。
在这里,您必须重写Prepared语句,因此占位符对应于日期,而不是整个表达式:
SELECT DATE(added) AS date
FROM data
WHERE DATE(added) <= DATE_SUB(?, INTERVAL 30 DAY)
(如果需要,30
也可以替换为占位符
答案 1 :(得分:1)
SELECT DATE(added) AS date
FROM data
WHERE DATE(added) <= DATE_SUB(?, INTERVAL ? DAY)
并将日期和间隔视为绑定值