[英]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.