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->bind_param()
为?
占位符提供值。
你使用的是 mysqlI 还是 PDO?
从哪里获取要更新的 ID?
@Barmar 使用 PDO
哦,我想我明白了。您需要上次插入时由 AUTO_INCREMENT
创建的 ID。从$conn->lastInsertId()
设置一个会话变量,并在他们下班时使用它。
【参考方案1】:
使用$conn->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
保存时需检查缓存中的数据在数据库中如果没有就就添加,有就更新,原来有而现在没有的就删除