MySQL Prepared Statement:更新多个值
Posted
技术标签:
【中文标题】MySQL Prepared Statement:更新多个值【英文标题】:MySQL Prepared Statment: Updating multiple values 【发布时间】:2020-04-12 06:51:28 【问题描述】:我创建了一个包含 10 个输入的表单,它可以从数据库中获取默认值。
<form class="updatePrices" action="includes\updateprices.inc.php" method="POST">
<?php
$sql = "SELECT * FROM price ";
$results = mysqli_query($conn, $sql) or die();
$name = "90";
while($row = mysqli_fetch_assoc($results))
echo " " . $row["name"]. " <input type='text' name=".$row['id']." value=$row['value']><br>";
echo " <input type='hidden' name=".$name." value=$row['id']>";
$name++;
echo '<button type="submit" name="update-submit">Ok</button>';
?>
</form>
现在我希望表单根据新的输入值更新数据库。
<?php
require 'dbh.inc.php';
$id = [$_POST['90'],$_POST['91'],$_POST['92'],$_POST['93'],$_POST['94'],$_POST['95'],$_POST['96'],$_POST['97'],$_POST['98'],$_POST['99']];
$price = [$_POST['1'],$_POST['2'],$_POST['3'],$_POST['4'],$_POST['5'],$_POST['6'],$_POST['7'],$_POST['8'],$_POST['9'],$_POST['10']];
$sql= "UPDATE price SET value= ? WHERE id = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql))
header("Location: ../manage.price.php?error=sqlerror");
exit();
else
mysqli_stmt_bind_param($stmt, "ii", $price, $id);
for($i=0;$i<10;$i++)
$id[$i];
$price[$i];
mysqli_stmt_execute($stmt);
header("Location: ../manage.price.php?success");
exit();
mysqli_stmt_close($stmt);
mysqli_close($conn);
但由于某种原因,我的代码仅将第一个值更新为 1(与输入值无关)
【问题讨论】:
您将参数绑定到您定义的数组,然后在您的 for 循环中,您只需执行语句。$id[$i]; $price[$i];
对这些变量值什么都不做。
你用数组本身而不是单个值调用mysqli_stmt_bind_param
。
有点相关:***.com/questions/36777813/…
谢谢@NigelRen
【参考方案1】:
您必须在每次循环时将 2 个参数的新值设置到准备好的语句中,然后使用新值执行()语句,并且按照 cmets 中的建议,您不需要将数组值移动到标量中首先,可以直接使用数组
else
for($i=0;$i<10;$i++)
mysqli_stmt_bind_param($stmt, "ii", $price[$i], $id[$i]);
mysqli_stmt_execute($stmt);
如果你使用 OO 语法,我认为它更容易阅读
else
for($i=0;$i<10;$i++)
$stmt->bind_param('ii', $price[$i], $id[$i]);
$stmt->execute();
【讨论】:
以上是关于MySQL Prepared Statement:更新多个值的主要内容,如果未能解决你的问题,请参考以下文章
使用 PDO Prepared Statement 在 MySQL 中插入 BIT 值
PHP MySQL Prepared Statement Join 错误
在 MySQL 中导入 50K+ 记录给出一般错误:1390 Prepared statement contains too many placeholders