首页 > 解决方案 > 如何使用准备好的语句将带有 if 语句的数组传递给 MySQL 查询?

问题描述

我正在制作一个有工作的网站,有人可以按类别过滤工作。但是,有人可能并不总是过滤作业,因此它必须依赖于前端选中的复选框。一旦到达 PHP 文件,它必须对数组进行内爆,然后使用每个变量来参数化查询。我找到了一些链接,展示了如何执行类似的应用程序,但我找不到任何关于如何使用 IF 语句和准备好的 mysqli 语句执行此操作的材料。

$o = 'o';
$sql="SELECT pid,title,description,location FROM jobs WHERE status=? ORDER BY job_date DESC";

if(isset($_POST['category'])){
    $category_filter = implode("','",$_POST['category']);
    $sql .= " AND category=? IN('".$category_filter."')";
}
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $o,$category_filter);
$stmt->execute();
$stmt->bind_result($pid,$title,$description,$location);
$job = '';
while($stmt->fetch()){
    include '../templates/job-listing.php';
        }

标签: phpmysqlmysqliprepared-statement

解决方案


你的代码几乎是好的。IN ,...问题是,在子句之后添加了约束“ ”,order by这将导致语法错误。改变:

$o = 'o';
$sql="SELECT pid,title,description,location FROM jobs WHERE status='" . $o . "' ";

$order_clause = " ORDER BY job_date DESC";

if(isset($_POST['category'])){
    $category_filter = implode("','",$_POST['category']);
    $sql .= " AND category IN('" . $category_filter . "')";
}

$sql .= $order_clause;

$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->bind_result($pid,$title,$description,$location);

....

推荐阅读