php - PDO - foreach 只更新最后一个

标签 php mysql arrays pdo

我是 PDO 新手,在更新数据库中的数组值时遇到问题。除了更新数组中的多个值外,一切正常。

带有 PHP 代码的 HTML:

<?php  
$next = 0;
echo '<ul>';
$sql = "SELECT * FROM customers LEFT JOIN products ON customers.product_code = products.product_code RIGHT JOIN transactions ON customers.transcode = transactions.transcode WHERE transactions.id = '$id'";

foreach ($pdo->query($sql) as $row) {
   echo '<li>'.$row['product_name'] .' x <input name="p_qty['.$next++.']" type="number" value="'. $row['p_quantity'] .'"></li>';                    
}
echo '</ul>';
?>

输出:

  • MVP 令人难以置信的增重剂(8 磅)x 2
  • MVP 令人难以置信的大量获得者 (16 磅)x 2
  • Elite Labs 100% Isoblend(4 磅)x 2

每当我尝试更改第三个结果的数量时,第一和第二个数量也会随之改变。

这是 PDO 代码:

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE transactions JOIN customers ON transactions.transcode = customers.transcode SET transactions.transcode = ?, date = ?, customers.custname = ?, payment = ?, status = ?, customers.p_quantity = ? WHERE transactions.id = ?";
$q = $pdo->prepare($sql);

foreach($_POST['p_qty'] as $qty){
    $q->execute(array($transcode, $date, $custname, $payment, $status, $qty, $id));
}
Database::disconnect();
header("Location: index.php");

最佳答案

您的 select 语句正在为相关事务 ID 提取那 3 行。

您的更新语句的 where 子句也仅通过事务 ID 提取,这意味着它将匹配那 3 行。

如果您希望更新语句仅更改其中一种产品的数量,则需要将附加字段传递给 where 子句。

关于php - PDO - foreach 只更新最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695228/

相关文章:

mysql - Solr 范围查询对于某些字段无法以正确的方式工作

C++:在 int 数组的最后一个元素中存储数据时遇到问题

java - 将图像绑定(bind)到数组值?

php - tcpdf 标题中的右对齐 Logo

php - ActiveRecord 插入空字段 Yii2

php - 在 PHP 中模拟启用 cookie 的浏览器

python - Python 中从 Last.fm API 中的 UTS 到 DateTime

python - 使用一维 bool 数组过滤二维数组

php - 配置 htaccess 以使用 Angular 和 PHP 路由

PHP 命名信号量?