PDO执行函数是否仅限于接受参数?

时间:2011-03-17 10:56:28

标签: php mysql pdo

我有一个工作的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函数没有被传递给执行函数吗?

2 个答案:

答案 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)

并将日期和间隔视为绑定值