2014-11-16 32 views
16

sürüme geçtikten sonra Codeigniter sürüm 3.0 için ben görüşme herhangi denetleyici denendikten sonra hata DB elde: Ben sayfayı yeniden zamanCodeigniter hata oturumu 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 

, ben olsun yine bir başka oluşturulan karma oturumu ile. Nasıl düzeltilir? $config['sess_driver'] = 'database'; Ben dosyanın baktım

bir hatadır (hat 138): config.php yılında

Ben oturumu mağaza set

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 ''; 
    } 
+0

olduğunu ? – Mihai

+0

GELEN Neden id 'birlikte kaçtı ama 'ile değer

Official Codeigniter Documentation for Session database driver

Yami

+0

Anladığım kadarıyla, bu sinta yanlış, ama nasıl düzeltilir? Bu çatalı indirdim: https://github.com/bcit-ci/CodeIgniter/tree/feature/session – Danil

cevap

0

TABLE_NAME ile seç 'veri' NEREDE 'id' = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5'

tablename eksik ve kodunuzda özel karakterler var.

24

Aynı problemi yaşadım ve çözümü bulmam biraz zaman aldı. Yüzeyde, talimatlar sadece oturum sürücüsünü yüklemenizi ve her şeyin harika olduğunu söyler, ancak CodeIgniter belgelerinin Veritabanı Sürücüsü bölümüne bakarsanız, $ config ['sess_save_path'] değişkenini yapılandırmanız gerektiğini görürsünüz. config.php dosyasında. Örneğin: Elbette

$config[‘sess_save_path’] = ‘ci_sessions’ 

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

, siz de veritabanında kurmak ci_sessions tablosunu olması gerekiyor, ama bu benim için eksik tablo adını çözdü.

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

Ve MySQL veritabanı:

yapılandırma dosyasında: CodeIgniter 3.0 ile

+0

Bu benim için çözüldü - teşekkürler! –

10

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`)); 

alanların adı sürümünden farklı 2.0

+0

Tablo belgelerinin config.php içine koyulduğunu belirten resmi belgeler eksik – wrivas

2

CI 3'ü kullanıyorum ve sadece değiştir:

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

Works ..=)

6

Codeigniter Versiyon 3

Düzenleme Yapılandırma Dosyası Kullanma ve seans sürücüsünü ayarlamak için "veritabanı" ve tablo adını sess_save_path MySql için

$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; 

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 için

:

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"); 
doğru sözdizimi id = Eğer eksik blah` NEREDE tabloismi GELEN sütun SEÇ `olan` tableName`