CakePHP でコードを書いているときに問題に直面しました。
有効期限が今から 1 時間以内のすべての行を削除したかった ()。PHP サーバーのタイムゾーンと MYsql サーバーのタイムゾーンが異なるため、date() などの PHP 関数を使用したくありません。さらに、セッション トークンは 30 秒後に期限切れになるため、両方のサーバーがリアルタイムで適切に同期されていないと、時差エラーに耐えることができません。
このコードを書き留めました
$this->deleteAll(array('SESSION_TRANSFER.EXPIRE_TIME <' =>
DboSource::expression('CURRENT_TIMESTAMP - INTERVAL 1 MINUTE')));
私の期待は
SELECT `SESSION_TRANSFER`.`SESS_TRANS_ID`
FROM `DISE`.`T_SESSION_TRANSFER` AS `SESSION_TRANSFER`
WHERE `SESSION_TRANSFER`.`EXPIRE_TIME` <
CURRENT_TIMESTAMP - INTERVAL 1
MINUTE
LIMIT 0 , 30
しかし、それはエラーを生成しています
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column
'SESSION_TRANSFER.EXPIRE_TIME <' in 'where clause'
SQL Query: SELECT `SESSION_TRANSFER`.`SESS_TRANS_ID`
FROM `DISE`.`T_SESSION_TRANSFER` AS `SESSION_TRANSFER`
WHERE `SESSION_TRANSFER.EXPIRE_TIME <` = CURRENT_TIMESTAMP - INTERVAL 1 hour
私もこれを試しました
$this->deleteAll(array('SESSION_TRANSFER.EXPIRE_TIME <'
=> 'CURRENT_TIMESTAMP - INTERVAL 1 MINUTE '));
クエリは期待どおりに適切ではありませんでした
SELECT `SESSION_TRANSFER`.`SESS_TRANS_ID`
FROM `DISE`.`T_SESSION_TRANSFER` AS `SESSION_TRANSFER`
WHERE `SESSION_TRANSFER`.`EXPIRE_TIME` < 'CURRENT_TIMESTAMP - INTERVAL 1 MINUTE '
なにか提案を?PHP の日付関数計算を使いたくない