使用mysqli操作动态数据库时更新字段无效果求助
问题排查与解决
核心问题:字符串未加引号导致SQL语法错误
ltime是VARCHAR类型,更新时字符串值必须用单/双引号包裹。你的$r_time值是类似"2hours 50minutes"的带空格字符串,直接拼进SQL后会变成:
UPDATE users SET ltime=2hours 50minutes WHERE id=10
MySQL会将2hours和50minutes解析为无效标识符,导致语句执行失败。而mysqli的query()方法默认不会主动抛出错误,所以你看不到执行失败的提示。
修复方案
推荐使用预处理语句(彻底避免SQL注入风险,同时自动处理字符串格式):
$stmt = $childConnection->prepare("UPDATE users SET ltime=? WHERE id=?"); // "si" 表示第一个参数是字符串(s),第二个是整数(i),根据字段类型调整 $stmt->bind_param("si", $r_time, $uid); $stmt->execute(); $stmt->close();
如果临时测试需要快速修复,也可以手动给字符串加单引号(不推荐生产环境使用,存在注入风险):
$childConnection->query("UPDATE users SET ltime='{$r_time}' WHERE id={$uid}");
额外排查技巧
执行语句后检查MySQL错误信息,能快速定位问题:
$result = $childConnection->query("UPDATE users SET ltime={$r_time} WHERE id={$uid}"); if (!$result) { var_dump("SQL错误: " . $childConnection->error); }
内容的提问来源于stack exchange,提问作者Test Test
相关产品推荐
相关产品推荐

