Php Codeigniter错误会话数据库

Php Codeigniter错误会话数据库,php,codeigniter,Php,Codeigniter,将Codeigniter升级到3.0版后,在尝试调用任何控制器后,我得到错误DB: 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` = 'd1d384b0ceed0bd72fa210337acc666aab1a04e

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

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
当我重新加载页面时,我会通过另一个生成的哈希会话再次获得该页面。如何修复

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

我查看了文件,其中有一个错误(第138行):


从表格名称中选择“数据”,其中“id”=“d1d384b0ceed0bd72fa210337acc666aab1a04e5”


您缺少表名以及包含特殊字符的代码。

我也遇到了同样的问题,我花了一段时间才找到解决方案。表面上看,说明告诉您只需加载会话驱动程序,一切都很好,但是如果您在CodeIgniter文档的数据库驱动程序部分中查找,您会发现需要在config.php文件中配置$config['sess\u save\u path']变量。例如:

 $config[‘sess_save_path’] = ‘ci_sessions’

当然,您还必须在数据库中设置ci_sessions表,但这为我解决了缺少的表名问题

使用codeigniter 3.0:

在配置文件中:

$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';
在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`));

字段的名称与2.0版不同,我使用CI 3,只需更改:

$config['sess_save_path']           = 'ci_sessions';

作品……=)

使用Codeigniter版本3

编辑配置文件,将会话驱动程序设置为“数据库”,并将sess_save_路径设置为table name

$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;
用于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`)
);
对于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");

正确的语法是
SELECT column FROM tablename,其中id=blah
您缺少
FROM tablename
为什么您的id用'but the value with'转义?我知道,这是一个不正确的问题,但如何修复?我下载了这个fork:config.php中缺少表名的官方文档
    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");