2016-09-05 15 views
0

我有一個使用條件IF語句MySQL的表達。作爲MySQL表達式,它返回TRUE或FALSE,但是當我在CodeIgniter的查詢構建器中使用它時,出現錯誤。這個錯誤表明條件的結果是像列一樣閱讀,但我該如何解決這個問題?謝謝。查詢生成器讀取條件像一列 - 未知列字段列表

的MySQL:

SELECT 
    positions.max_vol AS attendee_limit, 
    COUNT(users_positions.user_id) AS total_attendees, 
    IF(COUNT(users_positions.user_id) < positions.max_vol 
      OR positions.max_vol IS NULL, 
     TRUE, 
     FALSE) AS result 
FROM 
    positions 
     INNER JOIN 
    users_positions ON positions.id = users_positions.position_id 
WHERE 
    positions.id = 16 
     AND users_positions.calendar_date = '2016-09-05' 

功能:

private function check_attendee_limit($pos_id = NULL, $date = NULL) 
{ 
    $this->db->select('positions.max_vol, COUNT(users_positions.user_id), IF(COUNT(users_positions.user_id) < positions.max_vol OR positions.max_vol IS NULL, TRUE, FALSE)'); 
    $this->db->from('positions'); 
    $this->db->join('users_positions', "positions.id = users_positions.position_id", 'inner'); 
    $this->db->where('positions.id', $pos_id); 
    $this->db->where('users_positions.calendar_date', $date); 
    $query = $this->db->get(); 
    return $query->result(); // return the rows selected 
} 

錯誤:

A Database Error Occurred 

Error Number: 1054 
Unknown column 'TRUE' in 'field list' 

SELECT `positions`.`max_vol`, COUNT(users_positions.user_id), IF(COUNT(users_positions.user_id) < positions.max_vol OR positions.max_vol IS NULL, `TRUE`, FALSE) 
FROM `positions` 
INNER JOIN `users_positions` ON `positions`.`id` = `users_positions`.`position_id` 
WHERE `positions`.`id` = '15' 
AND `users_positions`.`calendar_date` = '2016-09-05' 

Filename: models/projects/Calendar_model.php 

Line Number: 141 

回答

1

CI增加反引號 - 這意味着你已經以防止CI逃逸您選擇

試試這個問題廣告

$this->db->select('positions.max_vol, COUNT(users_positions.user_id), IF(COUNT(users_positions.user_id) < positions.max_vol OR positions.max_vol IS NULL, TRUE, FALSE)', false); 

如果您對安全的擔心 - 在你的情況下,它並不重要,因爲你沒有在你的SELECT查詢中使用任何用戶輸入。

您可以找到有關查詢生成器here

+0

嗯更多的信息,你是完全正確的。我在錯誤中看到了那些後退標記,但它沒有點擊那個TRUE不應該像那樣被轉義。感謝您的解釋。 – user126440