PHP与MySQLI字段增量修改函数开发遇问题求助
我来帮你梳理几个实用的排查思路,都是日常调试这类问题常用的方法,一步步来:
先把生成的SQL打出来手动跑一遍
很多时候代码拼接出来的SQL和你脑子里想的完全不一样!你可以在执行查询前加一行echo $sql;,把最终要执行的SQL语句打印出来,然后复制到MySQL客户端(比如phpMyAdmin、Navicat或者命令行工具)里直接执行。这样能立刻看出是不是有语法错误,比如漏了逗号、引号,或者$howMany的值根本不是你预期的数字,甚至WHERE条件写错了字段名。确认查询真的执行了,且看影响行数
别光靠mysqli_error,有时候SQL语法没问题,但就是没匹配到要更新的行。你可以在执行语句后加个判断逻辑:$result = $mysqli->query($sql); if (!$result) { echo "执行出错: " . $mysqli->error; } else { echo "这次更新影响了 " . $mysqli->affected_rows . " 行"; }如果影响行数是0,那说明你的WHERE条件可能没匹配到任何数据,得去检查条件里的字段、值是不是和数据库里的一致。
先搞清楚$howMany到底是什么东西
增量更新的核心是$howMany得是合法的数值对吧?先var_dump($howMany)看看它的类型和实际值,会不会是个字符串?或者里面混了非数字字符?比如如果$howMany是"abc",MySQL会把它转成0,相当于没更新。要是用预处理语句的话,还要确认绑定参数的类型对不对,比如整数用i,浮点数用d,别绑错了类型。检查字段类型和数据库权限
先确认你要更新的字段是数值类型(比如INT、FLOAT、DECIMAL),要是个VARCHAR类型的字段,field + $howMany这种操作会把字符串转成0,结果肯定不对。另外,也别忽略权限问题——虽然mysqli_error没报错,但万一你的数据库账号没有UPDATE权限,也会导致更新没效果(这种情况少见,但也得排查)。开启MySQL通用日志看真实执行的SQL
如果上面的方法都没找到问题,那就让MySQL自己告诉你它收到了什么SQL。你可以开启MySQL的通用日志,它会记录所有发送给MySQL的查询语句。具体可以在MySQL的配置文件(my.cnf或my.ini)里设置general_log = 1,重启MySQL后,去日志文件里找对应的SQL,就能看到PHP实际发过去的是不是你想要的那个语句了。
内容的提问来源于stack exchange,提问作者Mattia Marziali

