我有一个工作的 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 函数没有被传递给执行函数吗?
最佳答案
您不能使用占位符替换我的 SQL 查询的这一部分:占位符及其相应的绑定(bind)值只能对应于值。
当您传递 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
也可以替换为占位符)
关于php - PDO执行函数是否仅限于接受参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5338051/