PHP PDO更新多行

时间:2018-12-28 21:27:34

标签: php pdo field updating

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的特定行,而是跳至最后一行并插入空白数据。如何选择要更新的特定产品名称?因此,基本上可以更新具有许多行的数据库中的数据。

2 个答案:

答案 0 :(得分:0)

您需要在输入中添加value

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

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

答案 1 :(得分:0)

花点时间考虑一下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);

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