2016-09-05 1 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); 

보안에 대한 걱정이있는 경우 - 선택한 쿼리에서 사용자 입력을 사용하지 않기 때문에 문제가되지 않습니다.

당신은 쿼리 빌더 here

+0

아에 대한 자세한 정보를 찾을 수 있습니다, 당신은 완전히 맞아. 오류에서 그 등 진드기를 봤지만 TRUE가 그런 식으로 이스케이프 처리되면 안된다는 사실을 알지 못했습니다. 설명 해줘서 고마워. – user126440

관련 문제