PHP PDO 更新多行

PHP PDO Update multiple rows

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 的特定行,而是跳到最后一行并插入空白数据。我如何才能选择要更新的特定产品名称?所以基本上更新数据库中有很多行的数据。

您需要在输入中添加一个value

<input type='hidden' name='product_id' value="SOME VALUE">

该值可能是 value='" . $row['product_id'] . "',但您需要从某处获取数据,例如从您正在查询的数据库中获取数据以装载表单。

花点时间想想 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);

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