php - 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 的特定行,而是跳到最后一行并插入空白数据。如何选择要更新的特定产品名称?所以基本上更新数据库中的数据有很多行。
解决方案
花点时间想想接下来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);
请注意,如果您使用命名参数,则需要在参数数组索引中包含冒号。
推荐阅读
- javascript - 试图在浏览器中获取blockstack用户数据
- arrays - 使用向量从 4d 数组中提取特定点
- spring-boot - 使用 OAuth2 从 Spring Boot 1.4 迁移到 1.5
- html - 在 :ref:`title
- javascript - 如何在chrome扩展制作中影响dom
- php - 如何配置ini文件用php发送邮件
- python-3.x - 将索引转换为日期时间会导致奇怪的错误
- php - 从数据库中提取数据并放入 html 表
- github - 创建 Github Token 以授予用户对 git clone 的访问权限
- php - 修改 WooCommerce REST API 产品图片上传