일반적인 접근 방식은 다른 쿼리 파트를 포함 할 배열을 만들고 필터링 할 항목에 따라 요소를 추가하는 것입니다. 예 :
<?php
$sql_parts = array(
'select' => array(),
'from' => array(),
'where' => array()
);
if ($filter_by_name != ''){
$sql_parts['select'][] = 'u.*';
$sql_parts['from'][] = 'users AS u';
$sql_parts['where'][] = "u.name = '".mysql_real_escape_string($filter_by_name)."'";
}
if ($filter_by_surname != ''){
$sql_parts['select'][] = 'u.*';
$sql_parts['from'][] = 'users AS u';
$sql_parts['where'][] = "u.surname = '".mysql_real_escape_string($filter_by_surname)."'";
}
//filter by data from another table
if ($filter_by_city_name != ''){
$sql_parts['select'][] = 'u.*, c.*';
$sql_parts['from'][] = 'cities AS c';
$sql_parts['from'][] = 'users AS u';
$sql_parts['where'][] = "c.cityname = '".mysql_real_escape_string($filter_by_city_name)."'";
$sql_parts['where'][] = "c.id = u.cityid";
}
$sql_parts['select'] = array_unique($sql_parts['select']);
$sql_parts['from'] = array_unique($sql_parts['from']);
$sql_parts['where'] = array_unique($sql_parts['where']);
$sql_query = "SELECT ".implode(", ", $sql_parts['select']).
"FROM ".implode(", ", $sql_parts['from']).
"WHERE ".implode(" AND ", $sql_parts['where']);
?>
그럴 수 있습니다. key => 값을 사용하여 field => searchcriteria를 설정할 수 있습니다. 장기적으로 볼 때 얼마나 많은 혜택을 누릴 지 확신 할 수 없지만 (LIKE 또는 비교 에서처럼) 복잡한 요구가 발생하면 유지 관리하는 것이 귀찮을 수 있습니다. 이 라이브러리 중 일부가 내장되어있는 라이브러리가있을 수 있습니다. – clifgriffin
가능한 [SQL Builder for PHP, JOIN 지원?] (http://stackoverflow.com/questions/216138/sql-builder-for) -php-with-join-support) – Gordon