如何解决如何使用 PHP 内爆函数通过一个 INSERT 语句将多行插入到 mysql 中?
我正在尝试使用 implode 函数仅通过一个 INSERT INTO 语句插入多行。我将“keluhanpg”和“mkpg”用于多个值。并且“mkpg”使用内爆,因为我使用了多个选定的数据并且我用逗号内爆。像这张图: enter image description here
<?PHP
session_start();
include_once('koneksi.PHP');
if(isset($_POST['add'])){
$kodepg = $_POST['kodepg'];
$noformpg = $_POST['noformpg'];
$waktupg = $_POST['waktupg'];
$deptpg = $_POST['deptpg'];
$lokasipg = $_POST['lokasipg'];
$merkpg = $_POST['merkpg'];
$tahunpg = $_POST['tahunpg'];
$op = isset($_POST['oppg']) && is_array($_POST['oppg']) ? $_POST['oppg'] : [];
$oppg = implode(",",$op);
$keluhanpg = isset($_POST['keluhanpg']) && is_array($_POST['keluhanpg']) ? $_POST['keluhanpg'] : [];
$mk = isset($_POST['mkpg']) && is_array($_POST['mkpg']) ? $_POST['mkpg'] : [];
$mkpg = implode(",$mk);
$shiftpg = $_POST['shiftpg'];
$statuspg = $_POST['statuspg'];
foreach ($_POST['keluhanpg'] as $key => $value){
$sql= "INSERT INTO tb_pg_cs (kode_pg,noform_pg,waktu_pg,dept_pg,lokasi_pg,merk_pg,tahun_pg,op_pg,keluhan_pg,mk_pg,shift_pg,status_pg) VALUES ('" . $kodepg . "','".$noformpg . "','".$waktupg . "','".$deptpg . "','".$lokasipg . "','".$merkpg . "','".$tahunpg . "','".$oppg . "','".$_POST['keluhanpg'][$key] . "','".$mkpg . "','".$shiftpg . "','".$statuspg . "')";
$sql1 = MysqLi_query($connect,$sql);
}
if($sql1){
$_SESSION['success'] = 'Data added successfully';
}else{
$_SESSION['error'] = 'Something went wrong while adding';
}
}
header("location: ".$base_url."index.PHP?page=pengajuan");
?>
输入成功退出,但“mkpg”数据合并为一个。像这样: enter image description here
如何编写代码来正确处理输入?
解决方法
我的 MySQL 精确版本 8.0.3 – vivie
您的版本允许在 INSERT .. SELECT 的 SELECT 部分使用递归 CTE。因此,您可以解析 PHP 提供的 CSV 并将其存储为许多单独的行。
这可以完成,例如,使用
INSERT INTO test (single_arg,csv_arg)
WITH RECURSIVE
source_data AS ( SELECT @single_arg single_arg,@csv_arg csv_arg ),cte AS ( SELECT single_arg,SUBSTRING_INDEX(csv_arg,',1) single_from_csv,TRIM(LEADING ',' FROM TRIM(LEADING SUBSTRING_INDEX(csv_arg,1) FROM csv_arg)) slack_from_csv
FROM source_data
UNION ALL
SELECT single_arg,SUBSTRING_INDEX(slack_from_csv,1),' FROM TRIM(LEADING SUBSTRING_INDEX(slack_from_csv,1) FROM slack_from_csv))
FROM cte
WHERE TRIM(slack_from_csv) <> '' )
SELECT single_arg,single_from_csv
FROM cte;
参见DEMO fiddle(包含一些解释)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。