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);
请注意,如果您使用的是命名参数,则需要在参数数组索引中包含冒号。
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);
请注意,如果您使用的是命名参数,则需要在参数数组索引中包含冒号。