首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不适用于PHP的数组智能多SQL查询

不适用于PHP的数组智能多SQL查询
EN

Stack Overflow用户
提问于 2021-03-03 15:20:28
回答 2查看 88关注 0票数 0

我试图在PHP中使用多个选中的复选框值执行多个查询。我面临的问题是,我的代码只执行一个复选框值的查询,而其余的被拒绝。

关于这个问题,我查看了StackOverflow,我得到了很多关于foreach循环的线程,但在我的例子中,当我应用它时,它不起作用。

请帮助我,我是第一次尝试前程循环,所以我有一点困惑,关于同样的。我还有一个问题,就是我无法不通过数组验证无效数据。我怎么解决这个问题的?它只适用于第一个复选值,但我想要所有的复选框。我试图从我在复选框中选择的那些特定ids的数据库中获取数据。并在数组中对所有查询进行回显,如我下面所述-

发送表单数据格式,如dev工具所示

代码语言:javascript
运行
复制
referenceID[]: PO0203211
referenceID[]: PO203213

代码语言:javascript
运行
复制
$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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-03 15:28:24

尝试这样做,当在foreach中使用exit()时,代码不会继续,只执行第一个元素。

编辑1:

好的,我将更深入地解释如何优化这段代码。

您可以从复选框中获得"id“标识符。

您可以使用SQL ()对此进行优化。

看看这个

代码语言:javascript
运行
复制
$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);
票数 1
EN

Stack Overflow用户

发布于 2021-03-03 15:23:25

您使用的是exit()函数,它将终止当前脚本。见php出口手册

我指的是

代码语言:javascript
运行
复制
foreach ($checkbox as $chk) {}

而不是去

代码语言:javascript
运行
复制
foreach ($stmt as $data) {}

脚本将在第一个foreach的第一个循环之后终止。

试着把它从前排移开。

**由于@El_vanja的评论而更新的答复

将您的$response = [];数组移动到foreach循环的上方和外部。这将保持数组中的数据,而不会在foreach循环的每一次迭代中重置数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66459934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档