You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测数据库行是否已更新?PHP更新后提示实现问询

解决你的PHP数据库更新提示与行检测问题

首先,要实现更新后显示提示消息和检测是否有行被实际更新,核心是利用数据库扩展提供的「受影响行数」函数,下面分部分说明并结合代码示例修改:

一、如何检测是否有行被更新

不管你用mysqli还是PDO,都有内置方法能获取UPDATE语句执行后真正被修改的行数:

  • 若用mysqli:执行UPDATE后,调用mysqli_affected_rows($conn)($conn是你的数据库连接对象),返回值就是实际被修改的行数。
  • 若用PDO:执行UPDATE语句后,调用$stmt->rowCount(),同样返回受影响的行数。

这里要注意:如果某行满足steamid='$a'且name LIKE '% royalcodes.com',但它的raffle1已经是1,这条UPDATE不会修改它,「受影响行数」会自动排除这种情况,只统计真正改变了值的行。

二、如何根据结果显示提示消息

拿到受影响行数后,就可以根据数值分支显示不同反馈:

  • 如果行数>0:说明有符合条件的行被成功更新,显示成功提示。
  • 如果行数=0:要么没有匹配的用户,要么匹配的用户的raffle1已经是1,不需要更新,显示对应的提示。

三、修改后的代码示例

假设你原来用的是mysqli扩展,修改后的代码大概是这样(包含安全的预处理写法):

// 假设你的数据库连接已建立,$conn是连接对象
$userSteamId = "用户的steamid值"; // 若该值来自用户输入,一定要用预处理防注入!

// 用预处理语句执行UPDATE(推荐写法,避免SQL注入)
$sql = "UPDATE 你的表名 SET raffle1 = 1 WHERE steamid = ? AND name LIKE ?";
$stmt = mysqli_prepare($conn, $sql);
// 绑定参数:两个s表示字符串类型,第二个参数是name的匹配模式
mysqli_stmt_bind_param($stmt, "ss", $userSteamId, "% royalcodes.com");
mysqli_stmt_execute($stmt);

// 获取实际受影响的行数
$affectedRows = mysqli_stmt_affected_rows($stmt);

// 根据结果显示提示消息
if ($affectedRows > 0) {
    echo "<p>成功更新 {$affectedRows} 条记录,raffle1已设为1!</p>";
} else {
    echo "<p>没有找到符合条件的用户,或者该用户的raffle1已经是1啦~</p>";
}

// 清理资源
mysqli_stmt_close($stmt);
mysqli_close($conn);

关键提醒

如果你的$a(用户steamid)是来自前端输入,绝对不能直接拼进SQL语句,一定要用上面的预处理写法,否则会有严重的SQL注入风险,这是生产环境的必备操作。

内容的提问来源于stack exchange,提问作者Red Rubix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:35:18