Codeigniter错误会话DB

Dan*_*nil 17 php codeigniter

将Codeigniter升级到3.0版后,我尝试调用任何控制器后得到错误数据库:

Error Number: 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 'WHERE `id` = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5'' at line 2

SELECT `data` WHERE `id` = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5'

Filename: libraries/Session/drivers/Session_database_driver.php
Run Code Online (Sandbox Code Playgroud)

当我重新加载页面时,我再次使用其他生成的哈希会话.怎么修?

config.php我设置会话存储:$config['sess_driver'] = 'database';

我查看文件哪里出错(第138行):

public function read($session_id)
    {
        if ($this->_get_lock($session_id) !== FALSE)
        {
            // Needed by write() to detect session_regenerate_id() calls
            $this->_session_id = $session_id;

            $this->_db
                ->select('data')
                ->from($this->_config['save_path'])
                ->where('id', $session_id);

            if ($this->_config['match_ip'])
            {
                $this->_db->where('ip_address', $_SERVER['REMOTE_ADDR']);
            }

            if (($result = $this->_db->get()->row()) === NULL) // Line 138
            {
                $this->_fingerprint = md5('');
                return '';
            }

            $this->_fingerprint = md5(rtrim($result->data));
            $this->_row_exists = TRUE;
            return $result->data;
        }

        $this->_fingerprint = md5('');
        return '';
    }
Run Code Online (Sandbox Code Playgroud)

Ken*_*ghn 27

我有同样的问题,我花了一段时间才找到解决方案.从表面上看,指令告诉您只需加载会话驱动程序,一切都很酷,但如果您查看CodeIgniter文档的数据库驱动程序部分,您会发现需要配置$ config ['sess_save_path']变量在你的config.php文件中.例如:

 $config[‘sess_save_path’] = ‘ci_sessions’
Run Code Online (Sandbox Code Playgroud)

http://www.codeigniter.com/userguide3/libraries/sessions.html#initializing-a-session

当然,您还必须在数据库中设置ci_sessions表,但这解决了我丢失的表名.


小智 11

使用codeigniter 3.0:

在配置文件中:

$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';
Run Code Online (Sandbox Code Playgroud)

在你的MySQL数据库中:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(40) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
    `data` blob NOT NULL,
    PRIMARY KEY (id),
    KEY `ci_sessions_timestamp` (`timestamp`));
Run Code Online (Sandbox Code Playgroud)

字段的名称与2.0版本不同


Cri*_*vez 8

使用Codeigniter版本3

编辑Config File并将会话驱动程序设置为"database",将sess_save_path设置为表名

$config['sess_driver'] = 'database';//enable session with db
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';//database table name
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Run Code Online (Sandbox Code Playgroud)

对于MySql

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(40) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        KEY `ci_sessions_timestamp` (`timestamp`)
);
Run Code Online (Sandbox Code Playgroud)

对于PostgreSQL:

    CREATE TABLE "ci_sessions" (
            "id" varchar(40) NOT NULL,
            "ip_address" varchar(45) NOT NULL,
            "timestamp" bigint DEFAULT 0 NOT NULL,
            "data" text DEFAULT '' NOT NULL
    );

CREATE INDEX "ci_sessions_timestamp" ON "ci_sessions" ("timestamp");
Run Code Online (Sandbox Code Playgroud)

会话数据库驱动程序的官方Codeigniter文档


Jim*_*000 0

从 TABLE_NAME 中选择“数据”,其中“id”=“d1d384b0ceed0bd72fa210337acc666aab1a04e5”

您缺少表名,并且您的代码包含特殊字符。