2017-05-16 37 views
0

這裏是我的查詢:CakePHP的3 SQL查詢生成器錯誤

$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 
    ) 
+0

due_date列的類型和格式是什麼? –

+0

due_date是一個字符串'05/16/2017' – aarontemp

+1

無論何時遇到此類錯誤,請始終顯示生成的查詢,即使問題對熟悉CakePHP的人員來說可能很明顯 - 謝謝! – ndm

回答

1

利用資本Ÿ代替的小y,而調用date()函數。有關格式化日期的詳細信息,請參閱 http://php.net/manual/en/function.date.php

但是, 始終使用date數據類型用於在mariadb中存儲日期。然後使用$ today = date(「Y-m-d」);然後,您可以直接比較它們而無需轉換和格式化

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); 

I recommend you to create a migration to change due_date column type to date .

+0

在您更改'due_date'和'$ today'之前,您可能會遇到前導零的問題。 –