2016-12-29 11 views
-1

データベースから古いセッションを削除するカスタムGCセッションメソッドセットがあります。ここでfuncがある:適切なPHPセッションガベージコレクションの構文?

public function gc($max){ 
     // Calculate what is to be deemed old 
     date_default_timezone_set('America/Chicago'); 
     $old = time() - $max; 

     // Set query 
     $this->db->query('DELETE * FROM session WHERE access < :old'); 

     // Bind data 
     $this->db->bind(':old', $old); 

     // Attempt execution 
     if($this->db->execute()){ 
     // Return True 
     return true; 
     } 

     // Return False 
     return false; 
    } 

$マックスvarは私のphp.iniでsession.gc_maxlifetime値を表しています。ここに私の.iniでのガベージコレクションの設定は次のとおりです。

session.gc_probability = 1 
session.gc_divisor  = 100 
session.gc_maxlifetime = 1440 

この機能が実行されるたびしかし、私は常に次の致命的なエラーを取得:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM Sessions WHERE access < 1482965344' at line 1' in /Applications/MAMP/htdocs/demo/DB.php:66

は助けるが、私は何かが欠けていますように感じることができません簡単...どんな提案?

+0

'右の構文は '*'の近くで使用すると、エラーの開始位置を教えてくれました。あなたの質問は無効です。 –

+0

あなたは他の質問に正しい構文を使用していましたhttp://stackoverflow.com/q/39928440/1415724 'DELETE FROM session'なぜ今は' DELETE * 'をやっていますか? –

答えて

0

あなたのSQLクエリが間違っています。 DELETEとFROMの間に*はありません。

$this->db->query('DELETE FROM session WHERE access < :old'); 
1

あなたは使用する必要があります。

'DELETE FROM session WHERE access < :old'あなたのDML文字列として。

*を削除します。