Ошибка сеанса связи 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` = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5'' at line 2 SELECT `data` WHERE `id` = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5' Filename: libraries/Session/drivers/Session_database_driver.php 

Когда я перезагружаю страницу, я получаю это снова с другой сгенерированной сессией хэша. Как исправить?

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

Solutions Collecting From Web of "Ошибка сеанса связи Codeigniter"

У меня была такая же проблема, и мне потребовалось некоторое время, чтобы найти решение. На первый взгляд, инструкции говорят вам просто загрузить драйвер сеанса, и все в порядке, но если вы посмотрите в разделе «Драйвер базы данных» документации CodeIgniter, вы обнаружите, что вам нужно настроить переменную $ config ['sess_save_path] в вашем файле config.php. Например:

  $config['sess_save_path'] = 'ci_sessions' 

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

Конечно, в вашей базе данных также должна быть таблица 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

Использование Codeigniter версии 3

Отредактируйте файл конфигурации и установите драйвер сеанса в «базу данных» и 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; 

Для 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"); 

Официальная документация Codeigniter для драйвера базы данных Session

Я использую CI 3 и просто изменяю:

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

Работы .. =)

SELECT 'data' FROM TABLE_NAME WHERE 'id' = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5'

вам не хватает имени табло, плюс ваш код включает специальные символы.