UPDATE操作后执行SELECT查询返回旧值问题求助
问题排查:MySQL字段更新后PHP输出"旧值"的原因及修复方案
问题核心分析
你遇到的问题根本不是更新后读取不到新值,而是一开始就没正确从数据库获取到first字段的实际值!
看你代码里这行:
$value = $result->current_field;
current_field是mysqli结果集对象的一个属性,它返回的是当前指针指向的字段在结果集中的索引位置(比如你的查询只选了first字段,索引就是0),完全不是字段的实际数值!
所以你后续的操作都是基于这个错误的索引值在执行:比如如果first原本是5,你拿到的$value是0,加1变成1,更新到数据库后phpMyAdmin看到的是1,但你echo的$value是0,自然误以为是"旧值",但实际上你从一开始就没拿到真正的旧值。
修复后的完整代码
下面是修正后的代码,同时还做了SQL注入防护(用参数化查询替代字符串拼接):
require_once('conn.php'); // 正确获取字段值 $query = "SELECT first FROM vote WHERE id = 1"; $result = mysqli_query($conn, $query); // 从结果集中取出一行关联数组 $row = mysqli_fetch_assoc($result); // 拿到first字段的实际值 $value = $row['first']; echo $value."<br>"; $newvalue = $value + 1; echo $newvalue; // 使用参数化查询避免SQL注入 $sql = "UPDATE vote SET first = ? WHERE id = 1"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "i", $newvalue); $do = mysqli_stmt_execute($stmt); // 关闭语句和连接 mysqli_stmt_close($stmt); $conn->close();
额外说明
- 获取结果集的常用方法:
mysqli_fetch_assoc($result):返回关联数组,键是字段名mysqli_fetch_row($result):返回索引数组,键是数字索引mysqli_fetch_object($result):返回对象,通过$obj->first获取值
- 永远不要直接把用户输入或变量拼接进SQL语句,参数化查询是防止SQL注入的基本操作。
内容的提问来源于stack exchange,提问作者Trabel
相关产品推荐
相关产品推荐

