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