【问题标题】:MySQL Prepared Statment: Updating multiple valuesMySQL Prepared Statement:更新多个值
【发布时间】: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
  • 谢谢@NigelRen

标签: php mysql forms mysqli sql-update


【解决方案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();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2011-10-21
    • 2014-11-04
    相关资源
    最近更新 更多