【问题标题】:CodeIgniter session error: The script tried to execute a method or access a property of an incomplete objectCodeIgniter 会话错误:脚本试图执行方法或访问不完整对象的属性
【发布时间】:2014-09-09 02:13:13
【问题描述】:

我在尝试从存储在会话中的数据中调用对象时遇到了 CodeIgniter 的问题。

代码:

public function do_index_1 ()
{   
    $tags= $this->input->post('tags');  
    $data['recommendation_for_you_unlimited']=$this->db->query
        ("SELECT *, MATCH(tags, message) AGAINST ('$tags') as score 
        FROM game
        WHERE MATCH(tags, message) AGAINST ('$tags')
        ORDER BY score
        "); 
    $data['recommendation_num'] = $this->db->get('game')->num_rows();
    $this->session->set_userdata($data);
}

public function do_index_3 ()
{
    $data['recommendation_num'] = $this->session->userdata('recommendation_num');
    $data['recommendation_for_you_unlimited'] = $this->session->userdata('recommendation_for_you_unlimited');
}

数据存储在do_index_1 中的会话变量中,并拉到do_index_3 中显示。第一个变量$data['recommendation_num'] 输出正常,但第二个$data['recommendation_for_you_unlimited'] 触发错误:

The script tried to execute a method or access a property of an incomplete object.

我到处搜索,发现可能是因为$data['recommendation_for_you_unlimited'] 是一个对象。但我不确定如何解决它。

【问题讨论】:

    标签: php codeigniter session


    【解决方案1】:

    $this->db->query() 返回一个对象(具体的对象取决于你使用哪个 CodeIgniter 的数据库驱动程序)。我认为您的意思是使用 $this->db->query()->result() 作为查询结果返回一个行数组。

    改为使用以下内容:

    $data['recommendation_for_you_unlimited'] = $this->db->query
        ("SELECT *, MATCH(tags, message) AGAINST ('$tags') as score 
        FROM game
        WHERE MATCH(tags, message) AGAINST ('$tags')
        ORDER BY score")->result();
    

    您遇到的错误是尝试将类存储在用户数据中的结果。当您使用$this->session->set_userdata() 存储内容时,传递的数据将被序列化为字符串。当稍后使用$this->session->userdata() 检索它时,它会被反序列化回原始数据。对于某些数据类型(例如类),您最终会丢失无法正确序列化的内容。

    我的建议是不要在 userdata(或 PHP 的 $_SESSION,因为它做同样的事情)中存储类或对象。不过,您可以毫无问题地存储仅具有属性的简单对象。

    在这种情况下,您似乎缺少->result()

    这是在 CodeIgniter 中生成查询结果的文档

    以下是 CodeIgniter 的 Active Record 及其 Session 类的文档:

    这里有一些关于 $_SESSION 工作原理的基本文档

    【讨论】:

    • 工作就像一个魅力。谢谢!
    猜你喜欢
    • 2010-11-16
    • 2014-01-06
    • 2012-02-02
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多