php - 根据id更新数据库中的数据?

Posted

技术标签:

【中文标题】php - 根据id更新数据库中的数据?【英文标题】:php - Updating data in database base on 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() 设置一个会话变量,并在他们下班时使用它。 【参考方案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?

以上是关于php - 根据id更新数据库中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据复选框更新数据库值? jQuery/php/ajax

用php根据数组更新html页面

保存时需检查缓存中的数据在数据库中如果没有就就添加,有就更新,原来有而现在没有的就删除

如何根据复选框更新数据库值? jQuery的/ PHP / AJAX

如何使用 php 更新 SQLite 表中的数据?

根据 parentId 和最小值更新数据库中的记录