gpt4 book ai didi

php - 在查询中使用 MONTH() 时 PDO 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:48 25 4
gpt4 key购买 nike

我正在尝试执行 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 为空。

当我手动将绑定(bind)值粘贴到查询中并在 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()) 作为绑定(bind)值时,某处似乎出了问题。

有没有办法解决这个问题?

最佳答案

这个:

$bindings = array ( 'userid_53e3d3275e364' => 8, 
'monthpaydate_53e3d3275e373' => 'MONTH(CURDATE())' );

不是这样的。 PDO 不能绑定(bind) mysql 函数。它只能绑定(bind)硬数据。

你不应该绑定(bind)它。而是将其放入您的查询中。

$sql = 'SELECT * FROM payment WHERE  `user_id` = :userid_53e3d3275e364  AND  MONTH(pay_date) =  MONTH(CURDATE())  ORDER BY `pay_date` DESC';

$bindings = array ( ':userid_53e3d3275e364' => 8 );

附言另外,正如 Félix Gagnon-Grenier 所说,您需要在参数中使用“:”。

关于php - 在查询中使用 MONTH() 时 PDO 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25190864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com