由于我已从CodeIgniter 2.2.6升级到3.xx,所以我有一个无法解决的问题。
function get_the_continue_id_pregunta_from_level($level_type, $level)
{
$this->db->select();
$this->db->from('preguntas');
$this->db->where($level_type, $level);
$this->db->where('language', 2);
$this->db->where("`id` NOT IN (SELECT `id_pregunta` FROM `user_as_preguntas` WHERE user_id =" . $this->session->userdata('id') . " )", NULL, FALSE);
$this->db->order_by("id", "ASC");
$this->db->limit(1);
$q = $this->db->get();
if(!$q->num_rows > 0) {
$q = FALSE;
}
return $q;
}
$g2 = $this->Qcm->get_the_continue_id_pregunta_from_level('level_1',$row->level_1);
$g2 = $g2->row()->id;
在bool上调用成员函数row()
答案 0 :(得分:0)
这可能是subquery
的问题,您可以像下面这样尝试get_compiled_select
function get_the_continue_id_pregunta_from_level($level_type, $level)
{
$this->db->select('id_pregunta');
$this->db->from('user_as_preguntas');
$this->db->where('user_id', $this->session->userdata('id'));
$where_clause = $this->db->get_compiled_select();
$this->db->select();
$this->db->from('preguntas');
$this->db->where($level_type, $level);
$this->db->where('language', 2);
$this->db->where("`id` NOT IN ($where_clause)", NULL, FALSE);
$this->db->order_by("id", "ASC");
$this->db->limit(1);
$q = $this->db->get();
if(!$q->num_rows > 0) {
$q = FALSE;
}
return $q;
}
答案 1 :(得分:0)
有2个问题:
第一:您需要处理查询没有任何结果的情况:在控制器中编写类似以下内容的
$g2 = $this->Qcm->get_the_continue_id_pregunta_from_level('level_1',$row->level_1);
if($g2){
$g2 = $g2->row()->id;
}else{
echo 'no records found';
}
现在您不再将->row()->id
设置为false了,不再有错误消息,因此可以处理该错误。
第二:由于查询在迁移之前已经生效,因此您需要阅读文档并按照升级说明进行操作。您很可能在数据库配置文件中错过了将$active_record = TRUE;
更改为$query_builder = TRUE;
会话库也可能存在问题,早期3.x版本中记录了一些问题,因此请确保升级到最新版本:3.1.10