PDO执行MySQL UPDATE语句时SESSION传入的user值被设为NULL问题求助
问题排查及解决方法
优先检查AJAX对应PHP文件的Session启动状态
如果你之前的var_dump是在非AJAX请求的页面执行的,结果不作数。AJAX请求是独立的HTTP请求,必须在执行UPDATE操作的PHP文件最开头加上session_start();,才能读取到SESSION中的userShort值,否则$_SESSION['userShort']本身就是NULL,自然会写入空值。更换参数绑定方式排查问题
你当前用的bindParam是引用传值,虽然当前写法逻辑上没问题,也可以换成更稳妥的bindValue写法,同时可以省略不必要的长度参数测试:// 替换原来的bindParam行 $stmt->bindValue(':worker', $worker, PDO::PARAM_STR);开启PDO错误日志打印实际参数
先开启PDO异常模式,捕获执行阶段的错误,同时打印参数绑定结果确认值是否正确传入:// 数据库连接后加这行开启错误抛出 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 绑定所有参数后、执行前加这行打印绑定信息,就能看到:worker对应的值是不是NULL $stmt->debugDumpParams();检查数据库字段约束
确认user字段没有设置特殊的外键约束、触发器,导致写入合法值时被强制改写为NULL。如果字段允许NULL且无约束,基本可以排除这个问题。
内容的提问来源于stack exchange,提问作者iMorces
相关产品推荐
相关产品推荐

