2017-05-16 16 views
0
ここ

は私のクエリですcakephpの3 SQLクエリビルダエラー

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.

はなぜか、どのようにこの問題を解決するために知っていけませんか?あなたの列がd/m/Y形式で日付を含む文字列であることをあなたの質問のコメントで述べているので、ここで

がクエリ

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の首都Yを使用します。書式設定日付の詳細については、 http://php.net/manual/en/function.date.php を参照してください。

ただし、 は、日付データ型を常にmariadbに格納するために使用します。次に、$ today = date( "Y-m-d")を使用します。次に、変換と書式設定なしで単純に比較することができます

0

で、あなたは自分のクエリで2つの文字列を比較する必要があります。

$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'の両方を変更するまでは、先行ゼロで問題になる可能性があります。 –