PHP执行SQL更新时如何校验待加值与数据库字段值的大小关系
问题分析
- 原代码WHERE条件
$sss > ss AND $sss < ss逻辑矛盾,不存在同时满足两个不等式的数值,因此永远不会触发更新操作 - 直接将
$sss变量拼接进预编译SQL存在SQL注入风险,不符合预编译语句的安全使用规范 - 校验逻辑与需求不符:需求为仅当
$sss与数据库ss字段相等时执行更新,原条件完全不匹配需求
修正方案
所有可变参数统一通过参数绑定传入,调整WHERE条件为匹配ss字段与$sss相等即可,修正后代码如下:
// 预编译SQL,所有动态值用占位符替代 $stmt = $conn->prepare("UPDATE users SET ss = ss + ? WHERE user = ? AND ss = ?"); // 绑定参数,参数类型标识可根据你实际字段类型调整,示例中$sss为int、user为字符串、$sss为int $stmt->bind_param("isi", $sss, $user, $sss); // 执行更新 $stmt->execute();
补充说明
执行后可通过$stmt->affected_rows判断执行结果:返回1代表满足条件更新成功,返回0代表不满足校验条件未执行任何操作。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

