【问题标题】:php - Updating data in database base on id?php - 根据id更新数据库中的数据?
【发布时间】:2022-01-22 13:07:47
【问题描述】:

我正在做一个让学生上课的项目,我想通过 PHP 更新数据库数据,同时运行 UPDATE 的 SQL 函数,但我希望能够根据数据的 id 更新它。

这是我目前正在使用的代码。

<?php

require_once './dba.php';

$status = "";

if(isset($_POST['time_in'])) {

    $query = "INSERT INTO nameOfTable (datetime) VALUES (NOW())";

    $d = $conn->prepare($query);

    $d->execute();     

} elseif(isset($_POST['time_out'])) {
    $query = "UPDATE nameOfTable SET datetime = NOW() WHERE id = ? ";

    $d = $conn->prepare($query);

    $d->execute();     
} else {
    $status = "Can't time in!";
}

【问题讨论】:

  • 您忘记调用$d-&gt;bind_param()? 占位符提供值。
  • 你使用的是 MySQLI 还是 PDO?
  • 从哪里获取要更新的 ID?
  • @Barmar 使用 PDO
  • 哦,我想我明白了。您需要上次插入时由 AUTO_INCREMENT 创建的 ID。从$conn-&gt;lastInsertId() 设置一个会话变量,并在他们下班时使用它。

标签: php mysql pdo


【解决方案1】:

使用$conn-&gt;lastInsertId() 获取他们打卡时分配的 ID。将其保存在会话变量中,并在他们打卡时使用它。

<?php

require_once './dba.php';

$status = "";

if(isset($_POST['time_in'])) {
    $query = "INSERT INTO nameOfTable (datetime) VALUES (NOW())";
    $d = $conn->prepare($query);
    $d->execute();     
    $_SESSION['clock_id'] = $conn->lastInsertId();
} elseif(isset($_POST['time_out'])) {
    if (!isset($_SESSION['clock_id'])) {
      $status = "You need to clock in first!";
    } else {
      $query = "UPDATE nameOfTable SET datetime = NOW() WHERE id = :id ";
      $d = $conn->prepare($query);
      $d->execute(['id' => $_SESSION['clock_id']]);   
    }
} else {
    $status = "Can't time in!";
}

【讨论】:

    【解决方案2】:

    您必须记住准备查询并将参数绑定到它。

    使用$id 变量准备具有适当 ID 的查询。

    确保在将 ID 传递给查询之前对会话进行身份验证,否则攻击者可以操纵此数据以提取任何他们想要的数据。

    // Its helpful to create elements within the code to bind onto. :id is ours.
    $query = "UPDATE nameOfTable SET datetime = NOW() WHERE id = :id ";
    
    $d = $conn->prepare($query);
    
    // Run the query & bind id to :id
    $d->execute(['id' => $id]); 
    

    【讨论】:

    • 是否需要定义变量 $id 才能运行 $d->execute?调试结果返回给我
    • 是的。确保你定义了 $id。如果你想测试,你可以 $id = 1 如果你有一行 id 为 1 :)
    • 但是如果我想在不指定 1、2 等 id 的情况下进行更新怎么办
    • 您想从哪里获取 ID?这个脚本的目的是什么? :) 你可以使用 $_POST 和 $_GET 来练习。如果您不想使用这些,可以使用 $_SESSION 变量。取决于你想做什么。我会帮你的,只是说明你需要什么。
    • 如果您不打算指定 id 值,那么您不需要使用准备好的语句,您的 UPDATE 将影响表中的 EVERY 行.确保这种行为是你想要的。
    【解决方案3】:

    你尝试更新

        $query = "UPDATE nameOfTable SET datetime = NOW() WHERE id = :id ";
    
        $d = $conn->prepare($query);
    
        $d->execute(['id' => $id ]);     
    

    【讨论】:

    • 是否需要定义变量 $id 才能运行 $d->execute?调试结果返回给我
    • @s.alonzo 当然可以。它怎么会知道你要更新哪个 ID?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2021-09-14
    • 2017-08-24
    • 2015-09-20
    相关资源
    最近更新 更多