如何检测数据库行是否已更新?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
相关产品推荐
相关产品推荐

