php - foreach 数组明智的多 SQL 查询在 PHP 中不起作用
问题描述
我正在尝试在 PHP 中使用多个选中的复选框按值执行多个查询。我面临的麻烦是我的代码只执行一个复选框值查询,其余的被拒绝。
我在 StackOverflow 上检查了这个问题,我得到了很多关于 foreach 循环的线程,但在我的情况下,当我应用它时它不起作用。
请帮助我,我是第一次尝试 foreach 循环,所以我对此有点困惑。我还有一个问题是我无法通过数组验证无效数据。我如何解决这个问题?它仅适用于第一个检查值,但我想要所有选中的复选框。我正在尝试从我在复选框中选择的那些特定 id 的数据库中获取数据。并在数组中为所有查询回显它,正如我在下面提到的 -
在开发工具中看到的发送表单数据格式
referenceID[]: PO0203211
referenceID[]: PO203213
PHP
$checkbox = $_POST['referenceID'];
foreach ($checkbox as $chk) {
$stmt = $con->prepare(
"SELECT * FROM `table` WHERE `ref` = :referenceid"
);
$stmt->execute([':referenceid' => $chk]);
$stmt = $stmt->fetchAll();
$response = [];
$i = 1;
foreach ($stmt as $data) {
$response[] = [
"slno" => $i,
"name" => $data['name'],
"orderid" => $data['address'],
];
$i++;
}
echo json_encode($response);
exit();
}
解决方案
试试这个,在exit()
foreach 内部使用时,代码不会继续,只执行第一个元素。
编辑1:
好的,我将更深入地解释如何优化这段代码。
您从选中的复选框中获得“id”标识符。
您可以使用 SQL IN() 对此进行优化。
看这个
$checkboxDivide = implode("','", $_POST['referenceID']);
$response = []; //Final Result
$stmt = [];
$query = mysqli_query($con,
"SELECT * FROM `table` WHERE `ref` IN('{$checkboxDivide}')"
);
while($stmt[] = mysqli_fetch_assoc($query));
//Delete empty last array
array_pop($stmt);
$i = 1;
foreach ($stmt as $data) {
$response[] = [
"slno" => $i,
"name" => $data['name'],
"orderid" => $data['address'],
];
$i++;
}
echo json_encode($response);
推荐阅读
- jquery - ajax 从 Spring Boot 获取 html 页面
- node.js - Alexa 音频播放器指令
- reactjs - 如何在反应中隐藏/显示特定组件
- assembly - 如何从字符串输入中删除逗号
- sql - 在 SQL Server 中创建递归函数
- java - 简单的 AsyncTasc - 更好的解决方案 - 防止内存泄漏
- raspberry-pi - 通过 T-Mobile GSM SIM 与 SIM800 板和 SAKIS3G 连接 Raspberry Pi-3
- python - Python TypeError:'int'对象不可迭代,试图将整数附加到列表中
- sql - ColdFusion 不使用 SQL 计算数量
- python - Pycharm 不导入 dlib