使用PHP在mysql查询中创建动态AND子句

时间:2016-04-12 11:25:06

标签: php mysql arrays

我正在根据数组值编写SQL Query但是得到了错误的结果。

例如,如果我的数组值为 [' PAK',' USA'] ,则查询应为: -

Select * From `search` WHERE country = 'PAK' AND country = 'USA'

如果数组值 [' USA','中国'] 则查询应为: -

Select * From `search` WHERE country = 'USA' AND country = 'China'

依旧......

我这样做但是我得到了错误的结果: -

SELECT * FROM `search` WHERE country = '' AND country = 'Pakistan' AND country = 'United States'

我想知道为什么 country ='' 总是在Query的开头添加..这就是我得到错误结果的原因。请帮帮我。在此先感谢..下面是我的代码..

PHP

$query_parts = array();

foreach($_POST['countryArray'] as $array){          
    $query_parts[] = "'".$array."'";
}
$string = implode(' AND country = ', $query_parts);
//echo $string;

$query =  "SELECT * FROM `search` WHERE country = {$string}";

echo $query;

1 个答案:

答案 0 :(得分:0)

代码很好。

但是,数组中的空白元素不受限制。

数组$_POST['countryArray']有一个空白元素。

您可以使用array_filter()过滤它:

$_POST['countryArray'] = array_filter($_POST['countryArray']);

最终守则:

$query_parts = array();
$_POST['countryArray'] = array_filter($_POST['countryArray']);
foreach($_POST['countryArray'] as $array){
  $query_parts[] = "'".$array."'";
}
$string = implode(' AND country = ', $query_parts);
//echo $string;
$query =  "SELECT * FROM `search` WHERE country = {$string}";
echo $query;