cakephp 3 sql 查询生成器错误
cakephp 3 sql query builder error
这是我的查询:
$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);
这是我得到的错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You
have an error in your SQL syntax; check the manual that corresponds to
your MariaDB server version for the right syntax to use near
''05/16/17')' at line 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
)
由于您在问题的评论中说过您的列是一个包含 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);
I recommend you to create a migration to change due_date
column type
to date
.
在调用date()函数时使用大写的Y,而不是小写的y。参考
http://php.net/manual/en/function.date.php
有关格式化日期的详细信息。
但是,
始终使用日期数据类型在 mariadb 中存储日期。然后使用 $today = date("Y-m-d");然后你可以简单地比较它们而不需要转换和格式化
这是我的查询:
$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);
这是我得到的错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''05/16/17')' at line 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
)
由于您在问题的评论中说过您的列是一个包含 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);
I recommend you to create a migration to change
due_date
column type todate
.
在调用date()函数时使用大写的Y,而不是小写的y。参考 http://php.net/manual/en/function.date.php 有关格式化日期的详细信息。
但是, 始终使用日期数据类型在 mariadb 中存储日期。然后使用 $today = date("Y-m-d");然后你可以简单地比较它们而不需要转换和格式化