为了账号安全,请及时绑定邮箱和手机立即绑定

PDO 语句选择日期小于错误的位置

PDO 语句选择日期小于错误的位置

PHP
翻过高山走不出你 2022-09-12 13:14:13
我花了2天时间试图解决这个问题 - 当尝试使用小于或等于运算符绑定值时,我在MySQL中的日期比较不起作用。<=我已将其缩小到第二个日期字段(来自一个更复杂的脚本,该脚本根据请求更改预准备语句连接/组/字段/条件。.因此,为什么我指的是table.column,并且只从下面的一个表中进行选择 - 无论哪种方式都可以使用),但我无法理解它。用于 php 5.x 的确切代码,但我刚刚升级到 php7.2.27。请看下面的 SQL 语句:$sth = $this->prepare("SELECT                         transaction.transactionid,                        transaction.accountid,                        transaction.userid,                        transaction.billdate,                        transaction.amount,                        transaction.description,                        transaction.confirmed                    FROM transaction                    WHERE                            DATE(`billdate`) BETWEEN :startdate AND :enddate #date('2020-03-12')                    ORDER BY billdate desc");    尝试将以下内容绑定到它:$terms = array(':startdate' => "2000-01-01",':enddate' => "2020-03-12");foreach ($terms as $key => $value) {        if($value == (int)$value)        $sth->bindValue("$key", $value, PDO::PARAM_INT);    else        $sth->bindValue("$key", $value);}var_dump($sth);var_dump($terms);$sth->execute();$this->rowCount = $sth->rowCount(); var_dump( $sth->fetchAll(PDO::FETCH_ASSOC));这将返回一个空数组。该表包含少量测试行。以下结果将正确返回: ...                 DATE(`billdate`) BETWEEN :startdate AND '2020-03-12'                ORDER BY billdate desc将日期包装在内似乎没有区别。date('date')我也试过这个...  DATE(`billdate`) >= :startdate AND   DATE(`billdate`) <= '2020-03-12'                ORDER BY billdate desc                ");    (当然,更改绑定术语,以便它们反映我正在使用的任何内容)我需要能够绑定这两个变量。感谢任何指针,因为我很乐意避免浪费另一天调试这个!谢谢
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

只需 :CASTDATE


WHERE billdate

BETWEEN CAST(:startdate AS DATE) AND CAST(:enddate AS DATE)"

并绑定为 :PDO::PARAM_STR


$sth->bindValue("startdate", "2000-01-01", PDO::PARAM_STR);

$sth->bindValue("enddate", "2020-03-12", PDO::PARAM_STR);


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信