簡體   English   中英

如何使用PHP編寫動態查詢凝視

[英]How write dynamic query staring using PHP

親愛的專家,假設我必須搜索3個相關選項1)名稱2)地址3)電話。 因此,我必須編寫8 [8]個獨立的querys.pls,請參見下面的示例…。

  $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子句將基於發布的值生成。

請幫忙! 特里亞德

使用數組! 並通過供應商特定功能逃避用戶輸入,以防止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);
}

您始終可以將數組條目“連接”到帶分隔符的字符串。 如果在這種情況下,您將使用“ 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以避免注入漏洞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM