2014-11-16 5 views
16

Dopo l'aggiornamento alla versione 3.0 Codeigniter ottengo l'errore di DB dopo aver provato chiamata qualsiasi controllore:Codeigniter sessione di errore 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 

Quando ricaricare la pagina, ottengo che ancora una volta con un altra sessione hash generato. Come risolvere?

In config.php ho impostato file di sessione: $config['sess_driver'] = 'database';

ho guardato file in cui è un errore (linea 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 ''; 
    } 
+0

la sintassi corretta è 'selezionare la colonna FROM tablename WHERE id = blah' non trovi il 'DA tableName' – Mihai

+0

Perché è il vostro id fuggito con' ma il valore con' ? – Yami

+0

Capisco, che sinta incorpore, ma come risolvere? Ho scaricato questo fork: https://github.com/bcit-ci/CodeIgniter/tree/feature/session – Danil

risposta

0

SELEZIONA 'dati' FROM nome_tabella WHERE 'id' = 'd1d384b0ceed0bd72fa210337acc666aab1a04e5'

manca il nome di tabulazione più il codice include caratteri speciali.

24

Ho avuto lo stesso problema e mi ci è voluto un po 'per trovare la soluzione. In superficie, le istruzioni ti dicono di caricare solo il driver di sessione e tutto è bello, ma se guardi in basso nella sezione Driver del Database della documentazione di CodeIgniter, trovi che devi configurare la variabile $ config ['sess_save_path'] nel tuo file config.php. Per esempio:

$config[‘sess_save_path’] = ‘ci_sessions’ 

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

Naturalmente, è necessario avere il tavolo ci_sessions istituito nel database pure, ma questo risolto il nome della tabella mancante per me.

+0

Questo lo ha risolto per me - grazie! –

10

Con CodeIgniter 3.0:

nel file di configurazione:

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

E nel vostro database 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`)); 

Il nome dei campi è diversa dalla versione 2.0

+0

Manca la documentazione ufficiale per mettere il nome della tabella nel config.php – wrivas

2

Io uso CI 3 e modifica semplicemente:

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

Opere ..=)

6

Utilizzando Codeigniter Versione 3

modificare il file di configurazione e impostare conducente sessione a "database" e sess_save_path al nome della tabella

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

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

per 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"); 

Official Codeigniter Documentation for Session database driver