2016-01-02 48 views
1

在我型號,我寫了這個函數MySQL的原始查詢笨的Active Record類錯誤VS MySQL的原始查詢

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的結果數據結構不一樣?

「因爲當我在活動記錄又試了一次,而不選擇這一領域

LEFT(question.question, 50) as question 

工作但它並沒有給我想要的領域。你們知道爲什麼嗎?

回答

2

在你$this->db->select()電話,你需要通過FALSE作爲第二個參數,這樣的活動記錄不會嘗試添加反引號`你列在select語句

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; 
} 

根據文檔

$此 - > db-> select()接受可選的第二個參數。如果您將 設置爲FALSE,則CodeIgniter將不會嘗試使用反引號來保護您的字段或表 名稱。如果您需要複合選擇 聲明,這很有用。

$this->db->select();

+0

我想它和它的工作!我通常忽略第二個參數。這解釋了爲什麼當我使用複合選擇查詢時Active Record大多不起作用。所以這畢竟只是我的錯。非常感謝@MKhalidJunaid! – NashguL