适当的PHP会话垃圾收集语法?

时间:2016-12-29 00:08:57

标签: php mysql session garbage-collection

我有一个自定义GC会话方法集,应该从我的数据库中删除任何旧会话。这是func:

    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;
    }

$ max var表示我的php.ini中的session.gc_maxlifetime值。以下是我的.ini中的垃圾收集设置:

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

但是无论何时运行此函数,我总会得到以下致命错误:

  

PHP致命错误:未捕获的异常&#39; PDOException&#39; with message&#39; SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近&#39; *来自会话的正确语法WHERE access&lt; 1482965344&#39;在第1行&#39;在/Applications/MAMP/htdocs/demo/DB.php:66

无法帮助但感觉我错过了一些微不足道的事情...有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您应该使用:

'DELETE FROM session WHERE access < :old'作为您的DML字符串。

删除*

答案 1 :(得分:0)

您的SQL查询错误。 DELETE和FROM之间没有*。只需使用这一行:

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