问题描述
$params = array_merge([$pstatus,$_POST["minimum_price"],$_POST["maximum_price"]],$branddata);
如果字符串为NULL时,$branddata
仍然存在,则sql将显示错误。因此,如果$branddata
为NULL /空,我想从$branddata
中删除$params
。
如果$branddata
的值$branddata
应该在$params
中,否则就不应该存在。
这是为PDO准备的语句功能。不能使用空的IN()
值。
我只能执行以下操作!
$base_sql = "SELECT %s FROM filter WHERE product_status = ?";
$query = sprintf($base_sql,"*")." AND price BETWEEN ? AND ?";
if(!empty($branddata)){
$query .= "AND brand IN($brand) ";
}
解决方法
您可以使用array_filter
从数组中删除空值或空值。
$params = [1,'',null];
print_r($params);
/*
Array
(
[0] => 1
[1] =>
[2] =>
)
*/
$params = array_filter($params);
print_r($params);
/*
Array
(
[0] => 1
)
*/
不幸的是它将删除所有空参数,包括零和空字符串。如果只希望删除null值,则可以向该函数添加回调以仅检查null。
$params = array_filter($params,function ($v){return $v !== null;});
编辑
除了您说它可以为空/空之外,还没有完全了解$branddata
中的内容,所以我不得不猜测一下。
首先,如果$branddata
实际上为空,则array_merge
会吓跑,我将用一个简单的空合并运算符$branddata ?? []
来解决这个问题。
以下是一个示例,它可以做更多的事情:
$branddata = ['',null];
$params = array_filter(array_merge(['alpha','beta'],$branddata ?? []));
这会吐出一个数组:
Array
(
[0] => alpha
[1] => beta
)
编辑
最适合您的文字版本是:
$params = array_filter(array_merge([$pstatus,$_POST["minimum_price"],$_POST["maximum_price"]],$branddata ?? []));