PHP PDO更新多行[重复]

Posted

技术标签:

【中文标题】PHP PDO更新多行[重复]【英文标题】:PHP PDO Update multiple rows [duplicate] 【发布时间】:2019-05-26 15:05:33 【问题描述】:
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 的特定行,而是跳到最后一行并插入空白数据。如何选择要更新的特定产品名称?所以基本上更新数据库中的数据有很多行。

【问题讨论】:

你没有设置值隐藏product_id输入 为什么&lt;/form&gt; 之前?你没有向我们展示什么? 【参考方案1】:

您需要在输入中添加value

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

我明白,但是如果我想更新多个产品名称,我会在一定程度上感到困惑 检查重复项

以上是关于PHP PDO更新多行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于更新多行的 PDO 循环

markdown 用于更新多行的PDO循环

PHP PDO Update语句总是返回0行受影响的rowCount()

重复密钥更新时的 PDO 插入

Php pdo rollBack() 不适用于更新语句

如何从另一个表更新mysql pdo中的字段[重复]