这是我的问题:
$today = date('m/d/y');
$todays=$this->Tasks->find()
->where(['user_id' => $this->Auth->user('id')])
->andWhere(["DATE_FORMAT(STR_TO_DATE(due_date, '%m/%d/%Y'),'%m/%d/%y')"=>$today]);
$this->set('todays',$todays);
以下是错误:
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您 您的SQL语法有错误;检查对应的手册 您的MariaDB服务器版本,以便在附近使用正确的语法 '05 / 16/17')'在第1行。
不知道为什么或如何解决这个问题?
这是查询
SELECT
Tasks.id AS `Tasks__id`,
Tasks.user_id AS `Tasks__user_id`,
Tasks.title AS `Tasks__title`,
Tasks.body AS `Tasks__body`,
Tasks.due_date AS `Tasks__due_date`,
Tasks.complete AS `Tasks__complete`,
Tasks.created AS `Tasks__created`,
Tasks.modified AS `Tasks__modified`
FROM
tasks Tasks
WHERE
(
user_id = :c0
AND
DATE_FORMAT(STR_TO_DATE(due_date, '%m/%d/%y'), '%m/%d/%y') :c1
)
答案 0 :(得分:1)
在调用date()函数时使用大写Y而不是小y。参考 http://php.net/manual/en/function.date.php 有关格式化日期的详细信息。
但是, 始终使用date数据类型在mariadb中存储日期。然后使用$ today = date(" Y-m-d");然后你可以简单地比较它们而不转换和格式化
答案 1 :(得分:0)
由于您在问题的评论中说您的列是包含d/m/Y
格式日期的字符串,因此您只需要比较查询中的两个字符串。
$today = date('m/d/Y');
$todays = $this->Tasks->find()
->where(['user_id' => $this->Auth->user('id')])
->where(['due_date' => $today]);
$this->set('todays', $todays);
我建议您创建迁移以更改
due_date
列类型 到date
。