首页 > 解决方案 > 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();
}

标签: phpsqlarrayspdoforeach

解决方案


试试这个,在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);

推荐阅读