php - PDO 语句 select where date less than error
问题描述
我花了 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
");
(当然,更改绑定术语,以便它们反映我正在使用的任何内容)
我需要能够绑定两个变量。
感谢任何指针,因为我希望避免浪费另一天调试这个!谢谢
解决方案
只是CAST
为了DATE
:
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);
推荐阅读
- javascript - React 将字符串解析为 html 并使用 forwardRef 将函数应用于 DOM
- c# - Swashbuckle Swagger UI 未获得正确的 url 权限被拒绝
- python - 每月项目数在 CreateView 中有效,但在 TemplateView 中无效
- unity3d - 如何从 json 文件中读取数据?
- python - 有没有办法在 Tkinter 中标记椭圆(canvas.create_oval)?
- python - 无法下载任何 Python 库
- wordpress - 如何调整激活 TinyMCE 自动保存功能间隔的插件
- apache-pig - 无法格式化最终的猪结果
- class - tf.scan 中的自定义可训练函数:被跟踪对象中不存在用于 Lambda 层调用的变量
- c - 让 Lua 5.1 和 IUP 3.30 在 Windows 10 x64 上使用 VSCode 和 GCC