如何使用PHP编写动态查询

时间:2010-10-25 08:40:40

标签: php mysql

尊敬的专家, 假设我必须搜索3个共同相关的选项1)名称2)地址3)电话。所以,我必须编写8 [8]个单独的查询。请参阅下面的示例...。

  $name= $_POST['name'];      
  $address = $_POST['address'];
  $phone= $_POST['phone'];
  if($name!=""&& $address==""&& $phone=="")
 {  $searching_query="SELECT id,name,address from info  where info LIKE '%$info%'";}        
   .....................................    
   ......................................
   ..........................................
   else if($name!=""&&$address==""&&$phone!="")
 {  $searching_query="SELECT id,name,address  from  info where name LIKE '%$ name%' AND phone LIKE '$phone' ";  }   
  else if ($name!=""&&$address!=""&&$phone!="")
 {  $searching_query="SELECT id,name,address  from  info where name LIKE '%$ name%' AND address LIKE '%$address%' AND phone LIKE '$phone' ";}

因此,如果相关搜索选项不止于此,那么我必须编写越来越多的查询。

现在我的问题是:如何动态编写确切的查询。我的意思是将根据发布的值生成查询的WHERE子句。

请帮忙! THX,里亚德

2 个答案:

答案 0 :(得分:2)

使用数组!并使用供应商特定功能转义用户输入以防止SQL注入。在这种情况下应该使用mysql_real_esacpe_string()。

$where = array();
foreach(array('name','address','phone') as $key) {
    if(isset($_POST[$key]) && !empty($_POST[$key])) {
        $where[] = $key . " LIKE '%" . mysql_real_escape_string($_POST[$key]) . "%'";
    }
}
$query = "SELECT id,name,address FROM info";
if(empty($where)) {
    $query .= "WHERE info LIKE '%" . mysql_real_escape_string($info) . "%'";
} else {
    $query .= "WHERE " . implode(' AND ',$where);
}

答案 1 :(得分:1)

您始终可以使用分隔符将数组条目“连接”到字符串。如果在这种情况下你会使用“AND”作为分隔符,你可能会得到帮助:

$like_clauses = array();

$fields = array( "phone", "address", "name" ) ;

foreach( $fields as $field) {
  if( !array_key_exist( $field, $_POST ) ) continue;

  $like_clauses[$field]=
    $field." LIKE '%"
    // thanx to @darko petreski's comment:
    .mysql_real_escape_string($_POST[$field]) 
    ."%'";

}

$query = "SELECT id,name,address from info where "
         .implode( "AND", $like_clauses );

(注意:未经测试 - 抓住这个想法)

编辑 - 添加mysql_real_escape_string以避免注入漏洞