【问题标题】:php mysqli update with fetchedphp mysqli 更新与获取
【发布时间】:2016-06-08 22:36:23
【问题描述】:

我正在尝试使用我获取的数据更新 mysql 数据库。 (顺便说一句,我需要为特定的单个项目执行此操作,但这不是问题。)在创建用于获取或更新的单独语句时,我可以这样做。另外,我可以像这样获取数据:

$query = "SELECT starting_amount FROM comp ORDER BY item DESC LIMIT 3, 1";

$result = $conn->query($query);

$row = mysqli_fetch_assoc($result);

我可以像这样更新数据:

$sql = "UPDATE comp SET final_amount=25 WHERE item='Y'";

但我不能将两者放在一起(我尝试了几种方法,但都失败了)。换句话说,我可以使用手动输入的数据更新表记录,例如我在更新语句中手动键入“25”,在本例中是来自“staring_amount”的数据,但我不知道如何使用将自动使用从表中获取的数据的语句进行更新。换句话说,我如何编写更新语句以便“SET final_amount=”后面跟着获取的数据?提前感谢您的帮助!

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    因此,您只需将获取的数据传递到查询中

    $starting_amount = $row['starting_amount'];
    $sql = "UPDATE comp SET final_amount=$starting_amount WHERE item='Y'";
    

    【讨论】:

      【解决方案2】:

      首先,我强烈建议研究预准备语句 - 使用预准备语句插入数据是一种防止 SQL 注入攻击的简单方法,也将使您想做的事情变得更容易。

      以下是根据您的示例使用 mysqli 准备的更新语句的示例:

      $statement = $conn->prepare("UPDATE comp SET final_amount=? WHERE item='Y'")
      $statement->bind_param(25);
      

      对于这个答案,我假设您只想使用结果集的第一行。

      使用上面的示例,您可以将 bind_param 中的值替换为行中的值。

      $statement->bind_param($row['starting_amount']);
      

      【讨论】:

      • 谢谢埃里克!我会在学习时研究准备好的陈述......谢谢你的提示!
      【解决方案3】:

      无需将它们作为单独的语句执行,因为您可以在 UPDATE 中加入查询。

      UPDATE comp AS c1
      JOIN (SELECT starting_amount 
            FROM comp
            ORDER BY item DESC
            LIMIT 3, 1) AS c2
      SET c1.final_amount = c2.starting_amount
      WHERE c1.item = 'Y'
      

      【讨论】:

      • 感谢巴马尔。我仍在学习基本步骤,所以此时我对 c1 和 c2 是什么感到困惑。但希望随着我的学习,我会想出更多的东西! :)
      • 它们是表别名。它们允许您使用短名称来引用较长的表名,当您需要引用子查询时需要它们,因为它不是命名表。
      • 当您在查询中有同一个表的多个实例时也需要它们,以便您区分它们。
      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多