【发布时间】:2014-08-07 19:41:54
【问题描述】:
我正在尝试执行 PDO 查询,但它返回零结果。但是当我在 MySQL 中运行查询时,它会返回两行。仅当我在 PDO 查询中添加 MONTN(column) 时才会出现此问题。
我在 PHP 中拥有的是这样的:
$sql = 'SELECT * FROM payment WHERE `user_id` = :userid_53e3d3275e364 AND MONTH(pay_date) = :monthpaydate_53e3d3275e373 ORDER BY `pay_date` DESC';
$bindings = array ( 'userid_53e3d3275e364' => 8,
'monthpaydate_53e3d3275e373' => 'MONTH(CURDATE())' );
$stmt = $this->db->prepare ( $sql );
$stmt->execute ( $bindings );
$result = $stmt->fetchAll ( \PDO::FETCH_CLASS, $class, $ctorArgs );
此代码$result 为空。
当我手动将绑定值粘贴到查询中并在 phpMyAdmin 中运行它时,我会返回两条记录(这是我所期望的):
SELECT *
FROM payment
WHERE `user_id` = 8
AND MONTH(pay_date) = MONTH(CURDATE())
ORDER BY `pay_date` DESC
当我在没有MONTH(CURDATE()) 的情况下运行上述 PDO 代码时,PDO 也会返回记录:
$sql = 'SELECT * FROM payment WHERE `user_id` = :userid_53e3d3275e364 ORDER BY `pay_date` DESC';
$bindings = array ( 'userid_53e3d3275e364' => 8 );
$stmt = $this->db->prepare ( $sql );
$stmt->execute ( $bindings );
$result = $stmt->fetchAll ( \PDO::FETCH_CLASS, $class, $ctorArgs );
但由于某种原因,当我将 MONTH(CURDATE()) 作为绑定值时,某处似乎出了问题。
有没有办法解决这个问题?
【问题讨论】:
-
您不能将表达式与函数调用绑定到参数。它将作为字符串“传输”。但是这个表达式不需要使用参数。只需在查询中使用它。