问题描述
将 Codeigniter 升级到 3.0 版后,尝试调用任何控制器后出现错误 DB:
After upgrade Codeigniter to version 3.0 I get error DB after trying call any controller:
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
当我重新加载页面时,我通过另一个生成的哈希会话再次得到它.如何修复?
When I reload page, I get that again with a other generated hash session. How to fix?
在 config.php
我设置会话存储:$config['sess_driver'] = 'database';
In config.php
I set session store: $config['sess_driver'] = 'database';
我查看了错误所在的文件(第 138 行):
I looked at file where is a error(line 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 '';
}
推荐答案
我遇到了同样的问题,我花了一段时间才找到解决方案.从表面上看,指令告诉你只加载会话驱动程序,一切都很酷,但是如果你往下看 CodeIgniter 文档的数据库驱动程序部分,你会发现需要配置 $config['sess_save_path'] 变量在您的 config.php 文件中.例如:
I had this same problem and it took me a while to find the solution. On the surface, the instructions tell you to just load the session driver and everything is cool, but if you look down in the Database Driver section of the CodeIgniter documentation, you find that you need to configure the $config[‘sess_save_path’] variable in your config.php file. For example:
$config[‘sess_save_path’] = ‘ci_sessions’
http://www.codeigniter.com/userguide3/library/sessions.html#initializing-a-session
当然,您还必须在数据库中设置 ci_sessions 表,但这为我解决了缺少表名的问题.
Of course, you have to have the ci_sessions table set up in your database as well, but this solved the missing table name for me.
这篇关于Codeigniter 错误会话数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!