You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CodeIgniter Rest API向MySQL插入多行动态表单数据

嘿,我来帮你搞定这个批量插入的问题!你现在能处理单条记录插入,那批量其实就是把前端动态生成的所有输入行数据打包传给后端,然后后端一次性执行批量插入操作就行,分前端和后端两部分来实现:

前端部分:确保动态生成的输入框能被批量识别

首先,你需要把所有输入框的name属性设置成数组格式,这样提交时浏览器会自动把同name的所有值打包成数组传给后端。比如:

<!-- 表单容器 -->
<form class="form-container" method="POST" action="your-backend-script.php">
  <!-- 初始表单行 -->
  <div class="form-row">
    <input type="text" name="product_name[]" placeholder="产品名称" required>
    <input type="number" name="product_price[]" placeholder="产品价格" required>
  </div>
  <button type="button" id="add-row">添加新行</button>
  <button type="submit">提交所有数据</button>
</form>

然后写JS逻辑,点击添加按钮时追加的新行,输入框的name也要保持数组格式:

document.getElementById('add-row').addEventListener('click', function() {
  const formContainer = document.querySelector('.form-container');
  const newRow = document.createElement('div');
  newRow.className = 'form-row';
  newRow.innerHTML = `
    <input type="text" name="product_name[]" placeholder="产品名称" required>
    <input type="number" name="product_price[]" placeholder="产品价格" required>
  `;
  formContainer.insertBefore(newRow, document.querySelector('button[type="submit"]'));
});

这样不管你加多少行,提交时product_name[]和product_price[]都会是包含所有输入值的数组。

后端部分:接收数组并批量插入MySQL

这里以PHP为例(用其他语言思路完全一致),核心是用MySQL的批量插入语法,同时用预处理语句防止SQL注入:

// 连接数据库(推荐用PDO,更安全灵活)
try {
  $pdo = new PDO('mysql:host=localhost;dbname=your_database_name', 'your_username', 'your_password');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
  die("数据库连接失败: " . $e->getMessage());
}

// 接收前端传来的数组
$productNames = $_POST['product_name'] ?? [];
$productPrices = $_POST['product_price'] ?? [];

// 准备批量插入的SQL模板和参数
$sqlTemplate = "INSERT INTO products (name, price) VALUES ";
$placeholders = [];
$params = [];

// 遍历所有行,生成占位符和对应参数
foreach ($productNames as $index => $name) {
  $price = $productPrices[$index] ?? '';
  // 跳过空行(可选,根据你的业务需求调整)
  if (empty(trim($name)) || empty(trim($price))) continue;
  
  $placeholders[] = "(?, ?)";
  $params[] = trim($name);
  $params[] = floatval($price);
}

// 有数据才执行插入
if (!empty($placeholders)) {
  $sql = $sqlTemplate . implode(', ', $placeholders);
  $stmt = $pdo->prepare($sql);
  $stmt->execute($params);
  
  echo "成功插入 " . $stmt->rowCount() . " 条记录";
} else {
  echo "没有可插入的有效数据";
}

几个关键提醒:

  • 必须用预处理语句(上面的PDO写法),绝对不能直接把用户输入拼到SQL里,防止SQL注入攻击。
  • 可以在前端加提交前验证,比如检查每一行的必填项是否填写完整,避免无效提交。
  • 如果想用AJAX异步提交,逻辑和表单提交一致,用FormData对象打包数据即可:
    document.querySelector('form').addEventListener('submit', function(e) {
      e.preventDefault();
      const formData = new FormData(this);
      fetch('your-backend-script.php', {
        method: 'POST',
        body: formData
      }).then(res => res.text()).then(msg => {
        alert(msg);
        // 提交成功后可以重置表单或移除已提交的行
      });
    });
    

这样就能完美处理动态添加的多行数据批量插入啦!

内容的提问来源于stack exchange,提问作者B. Jayshri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:15:14