【问题标题】:CI_SESSION unknown table in 'order clause'“订单子句”中的 CI_SESSION 未知表
【发布时间】:2014-04-23 12:54:37
【问题描述】:

我使用数据库表来存储 ci_session。这是我的控制器:

public function displayAllArticles() 
    {
        // custom limit, set in zconfig for all tables
        $customLimit = $this->config->item('articles_per_page');
        // get the total number or records
        $totalARTresults = $this->db->get('article')->num_rows();
        // set the paging variables
        if ($this->uri->segment(4) !="") 
        { 
            $limit = $this->uri->segment(4); 
        } else { 
            $limit = $customLimit; 
        } 
        $offset = 5; 
        $offset = $this->uri->segment(5); 
        $this->db->limit($limit, $offset);
        // line bellow is the offending line <<<<<<<<<<<<<<<<<<<<<<<<
        $this->db->order_by('articlecategoryID desc, articleSorder asc'); 
        $data['articles'] = $this->articlesModel->get_with_category();
        // session variables bellow are used in the view, for the 
        // code that display the message: Displaying x to y from total of z records

        $this->session->set_userdata('totalARTresults', $totalARTresults);
        $this->session->set_userdata('limit', $limit);
        $this->session->set_userdata('offset', $offset);  
        $data['articles'] = array_splice($data['articles'], $offset, $limit);
        // paging configuration
        $this->load->library('pagination');
        $config['base_url'] = site_url('/backEnd/articles/displayAllArticles/'.$limit.'/');
        $config['total_rows'] = $totalARTresults;
        $config['per_page'] = $limit;
        $config['uri_segment'] = 5;
        $config['full_tag_open'] = '<div class="dataTables_paginate paging_bootstrap pagination"><ul>';
        $config['full_tag_close'] = '</ul></div>';
        $config['cur_tag_open'] = '<li><a href=# style="color:#ffffff; background-color:#258BB5;">';
        $config['cur_tag_close'] = '</a></li>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        // initialize the paging
        $this->pagination->initialize($config); 
        // create & load the variables needed for the view 
        $errorMessage = '';
        $data['main_content'] = 'articles/articles';
        $data['title'] = 'Articles';
        $this->load->vars($data,$errorMessage);
        $this->load->vars($this->currentUser);
        $this->load->view('backOffice/template');  
    }   // end of function displayAllArticles

当我调用此函数时,我收到错误消息:

错误号:1054 “订单条款”中的未知列“article.articlecategoryID” 更新ci_sessions 设置last_activity = 1398256604,`............

我搜索了这个网站,我发现了这个: CI_session and Error Number: 1054 (Unknown column ...) 但解决方案: $this->db->_reset_write(); 不起作用。

那里的作者说: $this->session->userdata(); $this->session->set_userdata(); ETC... 必须在执行您自己的 CRUD ($this->db->...) 之前/之后使用,但是无论我在哪里移动会话代码,我都会收到相同的错误。

任何人都可以帮我解决这个问题吗?我知道我可以删除控制器中的 order_by 子句,但如果我这样做,我有很多遗留代码必须更改。

任何帮助将不胜感激。 问候,约翰

【问题讨论】:

    标签: codeigniter session


    【解决方案1】:

    确保以下事项 -


    1) 自动加载库的顺序(config/autoload.php)

    $autoload['libraries'] = array('database','upload','session','form_validation');
    // session loaded after database library
    


    2) 有一个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`)
    );
    
    //Refer: http://ellislab.com/codeigniter/user-guide/libraries/sessions.html
    // ensure table name: ci_sessions
    


    3) 在config/config.php 中启用ci_sessions

    $config['sess_cookie_name'] = 'ci_session';
    $config['sess_expiration'] = 0;
    $config['sess_expire_on_close'] = FALSE;
    $config['sess_encrypt_cookie'] = FALSE;
    $config['sess_use_database'] = TRUE;
    $config['sess_table_name'] = 'ci_sessions';    // ensure table name: ci_sessions
    $config['sess_match_ip'] = FALSE;
    $config['sess_match_useragent'] = TRUE;
    $config['sess_time_to_update'] =  86400 * 30; //30 days
    

    【讨论】:

    • 以上都做完了,即:$autoload['libraries'] = array('database','session'); $config['sess_use_database'] = 真;桌子已经就位。还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2012-07-13
    • 2011-06-03
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多