php - 如何使用准备好的语句将带有 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';
}
解决方案
你的代码几乎是好的。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);
....
推荐阅读
- asp.net - DropDownList 值作为外键插入数据库
- docker - Bamboo“运行 Docker 容器”插件从“等待服务启动”URL 中删除凭据
- makefile - pyenv:编译模块
- teradata - teradata 有没有办法从另一个表中替换一行中的多个字符串?
- python - ' HTML 编号显示 '
- javascript - 基本代码适用于除 IE 以外的所有浏览器
- amazon-web-services - AWS 中用于非常简单(转换)ETL 的最简单工具?
- sql - ssis 从 excel 导出到 sql,与列数无关
- javascript - 无法连接到我在 AWS 上运行的 Mongo 服务器。节点进程未启动,但 Mongod 日志看起来不错
- gradle - 如何更改/覆盖 rootDir/projectDir?