php - 如何使用 PHP 编写动态查询

标签 php mysql

尊敬的专家们, 假设我必须搜索 3 个相关选项 1) 姓名 2) 地址 3) 电话。所以,我必须编写 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 子句将根据发布的值生成。

请帮忙! 谢谢,里亚德

最佳答案

使用数组!并使用供应商特定函数转义用户输入,以防止 SQL 注入(inject)。在这种情况下应该使用 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);
}

关于php - 如何使用 PHP 编写动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4012987/

相关文章:

php - 缓存 AJAX 请求

php - 动态调整图像大小的 PHP 的内容长度

mysql - 依赖 MySQL SELECT

javascript - 使用空格分隔的数据将变量中的数据放入 <li> 中

php - WordPress如何在wp_query中使用两个变量作为Post__not_in参数

php - 陷入 PHP 循环的中间

mysql - 插入新记录时检查外键引用的功能

php - 与 mysqli_fetch_array 的混淆

php - 如何在php mysql中为\r\n添加双斜杠\\r\\n

php - 使用 PHP 在 SQL 中将 IP 地址存储为 0