首页 > 解决方案 > PHP PDO 更新多行

问题描述

foreach($results as $row){
echo "
 <input type='text' name='p_name' placeholder='" . $row['p_name'] . "'>
 <input type='text' name='p_description' placeholder='" . $row['p_description'] . "'>
 <input type='text' name='p_price' placeholder='" . $row['p_price'] . "'>
 <input type='hidden' name='product_id'>
 <input type='submit' name='update' value='update'>
 ";
}
echo "</form>";

if(isset($_POST['update'])){

$values = [
  'product_id' => $_POST['product_id'],
 'p_name' => $_POST['p_name'],
];

$stmt = $pdo->prepare('UPDATE products SET p_name = :p_name WHERE 
product_id = :product_id'
);
unset($_POST['update']);


foreach($values as $row){
 $stmt->execute($row);
}

}

我正在尝试更新数据库中的多个字段,因此当我更新其中一个的产品名称时,我希望将其发送到数据库。但是,它不会提交带有 ID 的特定行,而是跳到最后一行并插入空白数据。如何选择要更新的特定产品名称?所以基本上更新数据库中的数据有很多行。

标签: phppdofieldupdating

解决方案


花点时间想想接下来foreach($values)要做什么。该结果将是传递给的有效数据execute()吗?如果您的服务器上有正确的错误报告,您就会得到答案。

你只运行一个查询,所以你需要做的就是:

$values = [
    ':product_id' => $_POST['product_id'],
    ':p_name' => $_POST['p_name'],
];

$stmt = $pdo->prepare('UPDATE products SET p_name = :p_name WHERE product_id = :product_id');

$stmt->execute($values);

请注意,如果您使用命名参数,则需要在参数数组索引中包含冒号。


推荐阅读