【问题标题】:insert multiple values into multiple rows with prepared statement PHP, MYSQL使用准备好的语句PHP,MYSQL将多个值插入多行
【发布时间】:2019-09-24 13:20:33
【问题描述】:

我正在尝试将多选中的数据插入到具有多行的数据库中。

我曾经设法将它们全部插入 ONE 行,每行都带有一个逗号,从数据库的角度来看这并不是很好。 来自多选的数据以数组形式存储在变量中,然后应使用 foreach 循环将其填充到数据库中的多行中。

$array = implode((array)$_POST['multiselectdata']);

$sql = "INSERT INTO tbl_example (column1, column2) VALUES (?, ?)";

$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
    ....
    exit();
}
else {
    mysqli_stmt_bind_param($stmt, "ii", $array, $id);
    mysqli_stmt_execute($stmt);
    $result= mysqli_stmt_store_result($stmt);
    mysqli_fetch_all($result,MYSQLI_ASSOC);
    foreach($result as $row){
        echo $row["column1"];
    }
    exit()
}

因此,在每一行中,column1 中的数组应该显示 1 个值,column2 中总是会有相同的 id。目前这只向数据库中插入 1 个值并且只有 1 行

【问题讨论】:

  • 如果要插入多行,为什么只执行一次该查询?
  • mysqli_stmt_execute($stmt);应该在我的错的 foreach 循环中。尼克在下面完美地回答了这个话题。这可以通过带有数组的 foreach 循环来完成,或者如果值都可用逗号分隔,则可以使用 explode 来完成。

标签: php mysql mysqli


【解决方案1】:

您可以将 $_POST['multiselectdata'] 的内容作为数组进行迭代,并为数组中的每个值执行准备好的语句,而不是内爆:

$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
    // ....
    exit();
}
else {
    mysqli_stmt_bind_param($stmt, "ii", $value, $id);
    foreach (explode(',', $_POST['multiselectdata']) as $value) {
        mysqli_stmt_execute($stmt);
    }
}

请注意,在 INSERT 查询上调用 mysqli_stmt_store_result 没有任何意义,因为没有结果集。应该从您的代码中删除该行和下面的 foreach 循环。

【讨论】:

  • 非常感谢您的回答。不幸的是,它还没有完全工作。 $_POST['multiselectdata'] 中的数据存储如下:1,2,3,6。我是否需要提及“,”才能使 foreach 循环正常工作?
  • @RobinP 抱歉,我从您的代码中认为 $_POST['multiselectdata'] 是一个数组。在这种情况下,您将发送至explode。查看我的编辑。
  • 非常感谢您的帮助!我也首先感到困惑,因为我最初认为它会是一个数组。现在可以正常使用了
  • @RobinP 太好了。我很高兴能帮上忙。
猜你喜欢
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多