如何在PHP中忽略准备好的mysqli查询中的参数?
我有一个准备好的mysqli查询,如下所示:如何在PHP中忽略准备好的mysqli查询中的参数?,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个准备好的mysqli查询,如下所示: $query = $database->prepare("SELECT * FROM items WHERE inStock > ? AND size < ? AND name LIKE ?"); $query->bind_param('iis', $inStock, $size, $name); $query->execute(); $query=$databa
$query = $database->prepare("SELECT * FROM items WHERE inStock > ? AND size < ? AND name LIKE ?");
$query->bind_param('iis', $inStock, $size, $name);
$query->execute();
$query=$database->prepare(“从inStock>和size<和name LIKE?的项目中选择*);
$query->bind_参数('iis',$inStock,$size,$name);
$query->execute();
WHERE子句中有许多不同的条件用于过滤结果。
问题是,这些参数是以搜索形式提供的,它们不是必需的。例如,某人可以只使用名称,或只使用大小和名称,或同时使用大小、名称和inStock进行搜索
我需要一些方法来调整查询,以便只提供所需的参数。我能想到的唯一解决方案是创建一个巨大的if..else结构,其中存在具有所有搜索选项组合的准备好的查询,但这是不可能的,因为有数千个组合
我能想到的唯一实际的解决方案是使用一个未准备好的查询,在这里我将条件与诸如$query.=”和诸如“%”的名称粘在一起
但这非常难看,我非常希望继续使用准备好的查询系统。您可以建立一个条件列表,并将绑定值和类型添加到列表中,下面是一个快速模型,它使用了您提到的两个字段
$data = [];
$params = "";
$where = [];
if ( !empty($name)) {
$data[] = $name;
$params.="s";
$where[] = "name like ?";
}
if ( !empty($size)) {
$data[] = $size;
$params.="i";
$where[] = "size < ?";
}
$sql = "SELECT * FROM items";
if ( count($where) > 0 ){
$sql .= " where ". implode ( " and ", $where);
}
$query = $database->prepare($sql);
$query->bind_param($params, ...$data);
$query->execute();
$data=[];
$params=“”;
$where=[];
如果(!空($name)){
$data[]=$name;
$params.=“s”;
$where[]=“像什么样的名字?”;
}
如果(!空($size)){
$data[]=$size;
$params.=“i”;
$where[]=“尺寸<?”;
}
$sql=“从项目中选择*”;
如果(计数($where)>0){
$sql.=“where.”内爆(“and”,$where);
}
$query=$database->prepare($sql);
$query->bind_param($params,$data);
$query->execute();
请注意,bind_param()
使用..
来允许您传递数组而不是单个字段。听起来像是。。。。循环!使用查询生成器(例如DBAL)