? AND size-6ren">
gpt4 book ai didi

php - 如何忽略 PHP 中准备好的 mysqli 查询中的参数?

转载 作者:行者123 更新时间:2023-11-29 17:52:19 29 4
gpt4 key购买 nike

我有一个准备好的 mysqli 查询,如下所示:

$query = $database->prepare("SELECT * FROM items WHERE inStock > ? AND size < ? AND name LIKE ?");            
$query->bind_param('iis', $inStock, $size, $name);
$query->execute();

WHERE 子句中有许多不同的条件可以过滤掉结果。问题是,这些参数是在搜索表单中提供的,并且不是强制性的。例如,某人可以仅使用名称进行搜索,或者仅使用尺寸和名称进行搜索,或者同时使用尺寸、名称和 inStock 进行搜索。

我需要某种方法来调整查询,以便我可以只提供我想要的参数。我能想到的唯一解决方案是创建一个巨大的 if..else 结构,其中存在带有所有搜索选项组合的准备好的查询,但这是不可能的,因为有数千种组合。

我能想到的唯一实际的解决方案是使用未准备好的查询,其中我将条件与 $query .= "AND name LIKE '%".escapestuff($ _POST['名称'])."%'"

但这非常丑陋,我非常想继续使用准备好的查询系统。

最佳答案

您可以构建条件列表并将绑定(bind)值和类型添加到列表中,这是一个快速模型,它使用您引用的两个字段...

$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();

请注意,bind_param() 使用 ... 允许您传递数组而不是单个字段。

关于php - 如何忽略 PHP 中准备好的 mysqli 查询中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49206941/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com