2014-11-16 6 views
16

Nach dem Upgrade Codeigniter auf Version 3.0 erhalte ich Fehler DB nach einem Aufruf versucht, jeden Controller:Codeigniter Fehler Sitzung 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 

Wenn ich Seite neu zu laden, bekomme ich das wieder mit einer anderen erzeugten Hash-Sitzung. Wie repariert man?

In config.php stelle ich Session-Speicher: $config['sess_driver'] = 'database';

ich Datei angesehen, wo ein Fehler (Linie 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

die korrekte Syntax ist 'Spalte FROM Tabellenname SELECT WHERE id = blah' Sie Ihre ID mit' aber der Wert mit 'entkam fehlen 'FROM tableName' – Mihai

+0

Warum ist ? – Yami

+0

Ich verstehe, dass sinta incorect, aber wie zu beheben? Ich habe diese Gabel heruntergeladen: https://github.com/bcit-ci/CodeIgniter/tree/feature/session – Danil

Antwort

0

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

fehlt Ihnen der Tabellenname und Ihr Code enthält Sonderzeichen.

24

Ich hatte das gleiche Problem und es dauerte eine Weile, bis ich die Lösung fand. Auf der Oberfläche sagen die Anweisungen, dass Sie nur den Session-Treiber laden müssen und alles ist cool, aber wenn Sie im Abschnitt Database Driver der CodeIgniter-Dokumentation nachsehen, finden Sie, dass Sie die $ config ['sess_save_path'] Variable konfigurieren müssen in deiner config.php Datei. Zum Beispiel:

$config[‘sess_save_path’] = ‘ci_sessions’ 

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

Natürlich müssen Sie die ci_sessions Tabelle als auch in Ihrer Datenbank eingerichtet haben, aber den fehlenden Tabellennamen für mich gelöst.

+0

Dies löste es für mich - danke! –

10

Mit codeigniter 3.0:

In Konfigurationsdatei:

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

Und in Ihrer MySQL-Datenbank:

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

Der Name der Felder unterscheidet sich von der Version 2.0

+0

Die offizielle Dokumentation fehlt, um den Tabellennamen in die config.php zu setzen – wrivas

2

Ich benutze das CI 3 und ändere einfach:

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

Funktioniert ..=)

6

Mit Codeigniter Version 3

Bearbeiten der Config-Datei und legen Sie Sitzung Treiber auf "Datenbank" und sess_save_path zu Tabellenname

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

Für 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`) 
); 

Für 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