微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 PHP 内爆函数通过一个 INSERT 语句将多行插入到 mysql 中?

如何解决如何使用 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 举报,一经查实,本站将立刻删除。