【问题标题】:data not inserting in DB using array foreach function in PDO PHP数据未使用 PDO PHP 中的数组 foreach 函数插入 DB
【发布时间】:2021-02-09 16:28:35
【问题描述】:

当我使用不同的输入和相同的名称将数据发送到 PHP 中的服务器时,我无法通过 foreach 函数将数据插入到我的数据库中。 我尽了最大的努力和 stackoverflow 上提供的所有其他功能,但它们都对我没有帮助。

请帮助我如何进行此修复以及实现我的代码功能的真正代码。 因为开发者控制台发送数据是 -

productID:21202,33201,44202,44202,33204

Qty:1,2,3,4,5

PHP

foreach($_POST['productID'] as $product) {
   foreach($_POST['Qty'] as $qty) {
      $stmt = $con->prepare("INSERT INTO `table` (product,qty) VALUES (:p,:q)");
      $stmt->execute(array(
       ':p' => $product,
       ':q' => $qty 
      ));
   }
}

echo $_POST['productID'];
response is = 21202,33204,332061

【问题讨论】:

  • 请发送var_dump($_POST) 并将输出添加到您的问题中。我们需要查看完整的 $_POST 数组才能知道它包含什么。
  • 这看起来像一个逗号分隔的字符串,而不是一个数组。试试foreach(explode(',', $_POST['productID']) as $product) { foreach(explode(',', $_POST['Qty']) as $qty) {
  • 你真的应该在循环之前调用prepare(),然后在循环中使用新值调用execute()
  • 我猜你和Qty有同样的问题,但由于你没有添加我要求的内容,我只是猜测。
  • 我要求的是var_dump($_POST),而不是var_dump($_POST['productID'])。我现在已经写了三遍确切的代码 sn-p 了。只需复制/粘贴我写的内容,而不是尝试制作自己的版本。

标签: php arrays pdo foreach insert


【解决方案1】:

您的输入数据似乎是逗号分隔的值字符串,而不是数组。要遍历它们,您需要使用 explode 将它们转换为数组:

$stmt = $con->prepare("INSERT INTO `table` (product,qty) VALUES (:p,:q)");
foreach(explode(',', $_POST['productID']) as $product) {
   foreach(explode(',', $_POST['Qty']) as $qty) {
      $stmt->execute(array(
       ':p' => $product,
       ':q' => $qty 
      ));
   }
}

请注意,您只需要准备一次语句,因此我已将其移到循环之外。您还可以通过在循环外绑定参数来进一步优化此代码:

$stmt = $con->prepare("INSERT INTO `table` (product,qty) VALUES (:p,:q)");
$stmt->bindParam(':p', $product);
$stmt->bindParam(':q', $qty);
foreach(explode(',', $_POST['productID']) as $product) {
   foreach(explode(',', $_POST['Qty']) as $qty) {
      $stmt->execute();
   }
}

请注意,上面的代码会将productIDQty 值的所有组合插入到表中(就像您的原始代码一样),但您可能只需要匹配的值。在这种情况下,请使用以下代码:

$stmt = $con->prepare("INSERT INTO `table` (product,qty) VALUES (:p,:q)");
$stmt->bindParam(':p', $product);
$stmt->bindParam(':q', $qty);
$quantities = explode(',', $_POST['Qty']);
foreach(explode(',', $_POST['productID']) as $key => $product) {
    $qty = $quantities[$key];
    $stmt->execute();
}

【讨论】:

  • @JohnCart 绝对是,假设$con 是一个 PDO 连接
  • @JohnCart 我刚刚在我的服务器上用$_POST = array('productID' => '21202,51101,44202', 'Qty' => '4,5,6'); 测试了这个确切的代码,它在表中插入了 9 行
  • 我认为应该只插入三个
  • @JohnCart 请看我的最新编辑,它只会插入匹配值ProductIDQty,所以对于$_POST = array('productID' => '21202,51101,44202', 'Qty' => '4,5,6');,它会插入三行21202 4 51101 5 44202 6
  • @Nick 请在我 var_dump 得到响应时提供帮助 ` ["productID"]=> string(17) "21202,21202,21202" ["Qty"]=> string(5) " 1,2,3"`
猜你喜欢
  • 2023-03-11
  • 2018-11-28
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2018-04-06
  • 2014-12-06
相关资源
最近更新 更多