Codeigniter 活动记录类错误与 MySQL 原始查询
Posted
技术标签:
【中文标题】Codeigniter 活动记录类错误与 MySQL 原始查询【英文标题】:Codeigniter Active Record Class Error vs MySQL Raw Query 【发布时间】:2016-04-06 18:58:18 【问题描述】:在我的 Model 中,我使用 MySQL raw query
编写了这个函数function get_question_result($lr_id)
$raw_query = 'SELECT question_record.qr_id, LEFT(question.question, 50) as question,
question.correct_answer
FROM question_record
INNER JOIN question ON question.q_id = question_record.q_id
WHERE question_record.lr_id = '.$lr_id.' ';
$query = $this->db->query($raw_query);
$questionresult = $query->result_array();
return $questionresult;
它工作很好。它给了我想要的数组。我继续我的项目。
然后我突然很想在 CI Active Record Class 中尝试一下。
function get_question_result($lr_id)
$this->db->select('question_record.qr_id, LEFT(question.question, 50) as question, question.correct_answer');
$this->db->from('question_record');
$this->db->join('question', 'question.q_id = question_record.q_id', 'inner');
$this->db->where('question_record.lr_id', $lr_id);
$result = $this->db->get()->result_array();
return $result;
没有用。它给了我这个错误
php Fatal error: Call to a member function result_array() on a non-object
只是出于好奇,我哪里做错了? 是我写错了还是 Active Record 的结果数据结构不一样?
因为当我在 Active Record 中再次尝试时没有选择这个字段
LEFT(question.question, 50) as question
它有效,但它没有提供我想要的领域。你们知道为什么吗?
【问题讨论】:
【参考方案1】:在您的$this->db->select()
调用中,您需要将FALSE
作为第二个参数传递,以便活动记录不会尝试在选择语句中为您的列添加反引号`
function get_question_result($lr_id)
$this->db->select('question_record.qr_id, LEFT(question.question, 50) as question, question.correct_answer',FALSE);
$this->db->from('question_record');
$this->db->join('question', 'question.q_id = question_record.q_id', 'inner');
$this->db->where('question_record.lr_id', $lr_id);
$result = $this->db->get()->result_array();
return $result;
根据文档
$this->db->select() 接受可选的第二个参数。如果你设置 它为 FALSE,CodeIgniter 不会尝试保护您的字段或表 带有反引号的名称。如果您需要复合选择,这很有用 声明。
$this->db->select();
【讨论】:
我试过了,效果很好!我通常忽略第二个参数。这解释了为什么当我使用复合选择查询时 Active Record 大多不起作用。所以这毕竟只是我的错。非常感谢@MKhalidJunaid!以上是关于Codeigniter 活动记录类错误与 MySQL 原始查询的主要内容,如果未能解决你的问题,请参考以下文章