使用准备好的语句PHP、MYSQL将多个值插入多行

使用准备好的语句PHP、MYSQL将多个值插入多行,php,mysql,mysqli,Php,Mysql,Mysqli,我正在尝试将multiselect中的数据插入到具有多行的数据库中 我曾经设法将它们全部插入到一行中,每一行都有一个逗号,从数据库的角度来看,这不是很好。 multiselect中的数据存储为变量中的数组,然后应使用foreach循环将其填充到数据库中的多行中 $array = implode((array)$_POST['multiselectdata']); $sql = "INSERT INTO tbl_example (column1, column2) VALUES (?, ?)";

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

我曾经设法将它们全部插入到一行中,每一行都有一个逗号,从数据库的角度来看,这不是很好。 multiselect中的数据存储为变量中的数组,然后应使用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()
}

因此,在每一行中,第1列中应显示1个数组值,第2列中始终显示相同的id。目前,这仅将1个值插入数据库,仅将1行插入数据库,而不是将
$\u 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\u stmt\u store\u result
没有意义,因为没有结果集。应该从代码中删除该行和下面的
foreach
循环。

而不是将
$\u 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\u stmt\u store\u result
没有意义,因为没有结果集。应该从您的代码中删除该行和
foreach
循环。

非常感谢您的回答。不幸的是,它还没有完全起作用。$_POST['multiselectdata']中的数据存储方式如下:1,2,3,6。我是否需要提到“,”以使foreach循环正常工作?@RobinP抱歉,我从您的代码中认为
$\u POST['multiselectdata']
是一个数组。在这种情况下,您需要将其分解。请看我的编辑。非常感谢您的帮助!我首先也感到困惑,因为我最初认为它将是一个数组。它很好用now@RobinP太好了。我很高兴能帮上忙。非常感谢你的回答。不幸的是,它还没有完全起作用。$_POST['multiselectdata']中的数据存储方式如下:1,2,3,6。我是否需要提到“,”以使foreach循环正常工作?@RobinP抱歉,我从您的代码中认为
$\u POST['multiselectdata']
是一个数组。在这种情况下,您需要将其分解。请看我的编辑。非常感谢您的帮助!我首先也感到困惑,因为我最初认为它将是一个数组。它很好用now@RobinP太好了。我很高兴能提供帮助。如果您想插入多行,为什么只执行一次查询;应该在foreach循环中这是我的错。尼克在下面完美地回答了这个问题。这可以通过使用数组的foreach循环来完成,如果值都可用,则可以使用explode(用逗号分隔)。如果要插入多行,为什么只执行一次查询?mysqli_stmt_execute($stmt);应该在foreach循环中这是我的错。尼克在下面完美地回答了这个问题。这可以通过一个带有数组的foreach循环来完成,如果所有值都可用逗号分隔,则可以通过explode来完成。