1

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 の日付関数計算を使いたくない

4

1 に答える 1