未使用PDO PHP中的数组foreach函数将数据插入数据库

未使用PDO PHP中的数组foreach函数将数据插入数据库,php,arrays,pdo,foreach,insert,Php,Arrays,Pdo,Foreach,Insert,当我用不同的输入和相同的名称用PHP将数据发送到服务器时,我无法通过foreach函数插入数据库。 我尽了最大努力,在stackoverflow上提供了所有其他功能,但它们对我都没有帮助 请帮助我如何进行修复,以及真正的代码将如何实现我的代码功能。 开发人员控制台发送数据时- productID:2120233201442024420233204 数量:1,2,3,4,5 PHP foreach($_POST['productID'] as $product) { foreach($_PO

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

请帮助我如何进行修复,以及真正的代码将如何实现我的代码功能。 开发人员控制台发送数据时-

productID:
2120233201442024420233204

数量:
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

您的输入数据似乎是逗号分隔的值字符串,而不是数组。要对它们进行迭代,需要使用
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();
   }
}
请注意,上面的代码将把
productID
Qty
值的所有组合插入表中(与原始代码一样),但您可能只需要匹配的值。在这种情况下,请使用以下代码:

$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();
}

您的输入数据似乎是逗号分隔的值字符串,而不是数组。要对它们进行迭代,需要使用
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();
   }
}
请注意,上面的代码将把
productID
Qty
值的所有组合插入表中(与原始代码一样),但您可能只需要匹配的值。在这种情况下,请使用以下代码:

$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();
}

请执行
var\u转储($\u POST)
并将输出添加到您的问题中。我们需要查看完整的$\u POST数组才能知道它包含什么。它看起来像一个逗号分隔的字符串,而不是数组。尝试
foreach(explode(',',$POST['productID'])作为$product){foreach(explode(',',$POST['Qty'])作为$Qty){
您应该在循环之前调用
prepare()
,然后调用
execute()
循环中有新的值。我猜您在
数量方面也有同样的问题,但由于您没有添加我要求的内容,我只是在猜测。我要求的是
var\u转储($\u POST)
,而不是
var\u转储($\u POST['productID'))
。我已经编写了三次完整的代码片段。只需复制/粘贴我编写的内容,而不是尝试创建自己的版本。请执行
var\u转储($\u POST)
并将输出添加到您的问题中。我们需要查看完整的$\u POST数组以了解它包含的内容。这看起来像是逗号分隔的字符串,而不是数组。请尝试
foreach(explode(',',$\u POST['productID'])作为$product){foreach(explode(',',$\u POST['Qty'])作为$Qty){
您应该真正调用
prepare()
在循环之前,然后使用循环中的新值调用
execute()
。我猜您在
Qty
方面也有同样的问题,但由于您没有添加我要求的内容,我只是猜测。我要求的是
var\u dump($\u POST)
,而不是
var\u dump($\u POST['productID'))
。我已经写了三次完整的代码片段。只需复制/粘贴我写的内容,而不是尝试制作自己的版本。@JohnCart绝对正确,假设
$con
是一个PDOconnection@JohnCart我刚刚用
$\u POST=array('productID'=>'212025110144202','Qty'=>'4,5,6',在我的服务器上测试了这段代码);
它在表格中插入了9行我认为它应该只插入three@JohnCart请参阅我的最新编辑,它将只插入
ProductID
Qty
的匹配值,因此对于
$\u POST=array('ProductID'=>'212025110144202','Qty'=>'4,5,6'))
它插入三行
21202 4 51101 5 44202 6
@Nick当我变量转储时,请帮助我得到响应“[“productID”]=>string(17)“212022120221202”[“Qty”]=>string(5)“1,2,3”`@假设
$con
是一个PDO,则JohnCart是绝对正确的connection@JohnCart我刚刚用
$\u POST=array('productID'=>'212025110144202','Qty'=>'4,5,6',在我的服务器上测试了这段代码);
它在表格中插入了9行我认为它应该只插入three@JohnCart请参阅我的最新编辑,它将只插入
ProductID
Qty
的匹配值,因此对于
$\u POST=array('ProductID'=>'212025110144202','Qty'=>'4,5,6'))
它插入三行
21202 4 51101 5 44202 6
@Nick当我变量转储时,请帮助我得到响应“[“productID”]=>string(17)“212022120221202”[“Qty”]=>string(5)“1,2,3”`