通过JSON.stringify/AJAX传递多参数失败问题排查
问题排查与修复方案
嘿,我一眼就揪出了核心问题,再给你补充几个实用的调试建议,帮你快速搞定库存更新的问题!
1. 最关键的错误:变量名不匹配
你在JS里定义的对象属性是adjAmt,但在PHP里却错误地尝试读取amtAdj——这两个名字完全不对应!这直接导致$amtAdj的值是null,SQL语句相当于给库存加了个空值,自然不会有任何变化。
修正后的核心PHP代码:
if(isset($_POST['invAdj'])) { $invAdj = json_decode($_POST['invAdj']); $itemId = $invAdj->itemId; // 这里把amtAdj改成adjAmt,和JS里的属性名严格对应 $amtAdj = $invAdj->adjAmt; // 建议加上SQL执行的错误检查,方便后续调试排错 $sql = "UPDATE stock_levels SET stocklevel = stocklevel + " . $amtAdj . " WHERE id = " . $itemId; $result = mysqli_query($link, $sql); if (!$result) { // 输出数据库错误信息,能帮你快速定位隐藏问题 echo mysqli_error($link); exit; } echo "库存更新成功"; }
2. 额外调试小技巧
- 你可以在PHP里先打印接收到的数据,确认参数是否正确传递:
var_dump($invAdj); // 看看解析后的对象是不是包含正确的itemId和adjAmt - 把拼接好的SQL语句打印出来,直接复制到数据库客户端执行,验证语句本身是否正确:
echo $sql; // 输出完整SQL语句,手动测试更直观
关于安全的小提醒
虽然你说先优先搞定功能,但还是得提一句:直接拼接SQL语句存在严重的SQL注入风险,等功能正常运行后,一定要改成使用mysqli预处理语句,比如:
$stmt = mysqli_prepare($link, "UPDATE stock_levels SET stocklevel = stocklevel + ? WHERE id = ?"); mysqli_stmt_bind_param($stmt, "ii", $amtAdj, $itemId); mysqli_stmt_execute($stmt);
内容的提问来源于stack exchange,提问作者Tutoro
相关产品推荐
相关产品推荐

