2016-12-29 1 views
-1

У меня есть специальный метод сеанса GC Session, который должен удалить любые старые сеансы из моей базы данных. Вот 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; 
    } 

в $ макс вар представляет значение session.gc_maxlifetime в моей php.ini. Вот настройки для сбора мусора в моих .ini:

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

Однако всякий раз, когда работает эта функция, я всегда получаю следующее Fatal Error:

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 строки.

Удалить *.