Database error 1054 in encoder

I am trying to make an OTH application and I am getting this error

Database error has occurred

Bug #: 1054

Unknown column data in field list

SELECT data

FROM ci_sessions

WHERE id

= 'dd8fddaabb45c365fbf27a6fdc5ea60d59f569e4' AND ip_address

= ':: 1'

File name: libraries / Session / drivers / Session _database_driver.php

Line number: 160

This is Session_database_driver.php

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)
            {
                $this->_fingerprint = md5('');
                return '';
            }

            // PostgreSQL variant of a BLOB datatype is Bytea, which is a
            // PITA to work with, so we use base64-encoded data in a TEXT
            // field instead.
            $result = ($this->_platform === 'postgre')
                ? base64_decode(rtrim($result->data))
                : $result->data;

            $this->_fingerprint = md5($result);
            $this->_row_exists = TRUE;
            return $result;
        }

        $this->_fingerprint = md5('');
        return '';
}

      

+3


source to share


3 answers


According to the CI manual regarding the Sessions

basic table format ci_sessions

:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
);

      

You are using different fields in your php code:

$this->_db
                ->select('data')
                ->from($this->_config['save_path'])
                ->where('id', $session_id);

      



So, changing this code to:

$this->_db
                ->select('user_data')
                ->from($this->_config['save_path'])
                ->where('session_id', $session_id);

      

Your code should work.

+3


source


I think the correct solution is to check if your DB is created correctly.

According to the Documentation for CI 3.0.0, the correct database would be:



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

      

I disagree with changing the CI driver files

+2


source


I have the same problem, I have already changed ...

$this->_db
                ->select('data')
                ->from($this->_config['save_path'])
                ->where('id', $session_id);

      

to → → →

$this->_db
                ->select('user_data')
                ->from($this->_config['save_path'])
                ->where('session_id', $session_id);

      

the problem will exist if i do this in my config.ph

$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;

      

+1


source







All Articles