2011-10-26 3 views
-2

이 쿼리를 작성했습니다.변수는 문자열로 래핑되어야합니다.

 $sql = "SELECT `candidates`.`candidate_id`, `candidates`.`first_name`, `candidates`.`surname`, `candidates`.`DOB`, `candidates`.`gender`, DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) AS `age`, `candidates`.`talent`, `candidates`.`location`, `candidates`.`availability`, `candidate_assets`.`url`, `candidate_assets`.`asset_size` 
      FROM `candidates` 
      LEFT JOIN `candidate_assets` ON `candidate_assets`.`candidates_candidate_id` = `candidates`.`candidate_id` 
      WHERE `candidates`.`availability` = 'yes'"; 

      if(isset($type)) { 
       $sql .= ' AND candidates.talent = '. "$type"; 
      } 

      if(isset($skill)) 
      { 
       $sql .= ' AND candidates.skill = '."$skill"; 
      } 

      if(isset($gender)) 
      { 
       $sql .= ' AND candidates.gender = '."$gender"; 
      } 

    $query = $this->db->query($sql); 

    return $query->result_array(); 
$type $type, $skill$gender 변수에 전달 된 변수가 포함 된 변수가 SQL에 반환되면 ""가능합니까? 어떻게하면 좋을까요?

+0

COdeIgniter 또는 다른 프레임 워크를 사용하고 있습니까? 그 방법들은 그렇게 보입니다. 또한 이전 질문을 기반으로합니다. 그렇다면 $ this-> db-> escape_string ($ value)을 사용하십시오. –

+0

사람들은 왜 여전히 동적으로 생성 된 쿼리를 사용하고 있으며 현재 이스케이프 중입니까? :/ – ThiefMaster

+0

@ThiefMaster 우리는 www에 관한 모든 오래된 PHP 튜토리얼을 없앨 수 없기 때문에. 마법 질문은 항상 SO 질문에서 나타난다. –

답변

2

나는 메서드가 어떻게 보이는지, 그리고 이전 질문 중 일부를 기반으로하고 있으며, 따라서이 변수에 $this->db->escape_str($value)을 사용할 수 있으므로, 어떤 유형이든 상관없이 문자열로 이스케이프 처리됩니다.

0
' AND candidates.talent = "'. $type . '"'; 

당신은 제대로 입력을 탈출하기 위해 mysql_real_escape_string() 던져 할 수 있습니다.

0

이 시도 :

if(isset($type)) { 
    $sql .= ' AND candidates.talent = "'. $type . '"'; 
} 

을 유사하게 다른 두 조항에 대해.

0
if(isset($gender)) 
{ 
     $gender = mysql_real_escape_string($gender); 
     $sql .= " AND candidates.gender = '$gender'"; 
}