Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Codeigniter error session DB

After upgrade Codeigniter to version 3.0 I get error DB after trying call any controller:

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

When I reload page, I get that again with a other generated hash session. How to fix?

In config.php I set session store: $config['sess_driver'] = 'database';

I looked at file where is a error(line 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 '';
    }
like image 863
Danil Avatar asked Nov 16 '14 18:11

Danil


People also ask

How check session is set in CodeIgniter?

php $session->set('some_name', 'some_value'); If you want to verify that a session value exists, simply check with isset() : <? php // returns false if the 'some_name' item doesn't exist or is null, // true otherwise: if (isset($_SESSION['some_name'])) { // ... }

What is session in CodeIgniter?

The Session class permits you maintain a user's “state” and track their activity while they browse your site. CodeIgniter comes with a few session storage drivers: files (default; file-system based) database.

How can store array in session in CodeIgniter?

$this->session->userdata('property_id') would return the entire array stored in the session for the 'property_id' variable. All you need to do after that is access the elements like a regular PHP array. Code: $value = $this->session->userdata('property_id');


1 Answers

I had this same problem and it took me a while to find the solution. On the surface, the instructions tell you to just load the session driver and everything is cool, but if you look down in the Database Driver section of the CodeIgniter documentation, you find that you need to configure the $config[‘sess_save_path’] variable in your config.php file. For example:

 $config[‘sess_save_path’] = ‘ci_sessions’

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

Of course, you have to have the ci_sessions table set up in your database as well, but this solved the missing table name for me.

like image 62
Kenneth Vaughn Avatar answered Oct 26 '22 17:10

Kenneth Vaughn