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