给经销商的对账单里出现「成本价」「毛利率」两列,一共 480 行,采购部当天就打电话来问。日志里能对上时间点,这种反而好排。
导出复用了详情接口的查询,SELECT 星号把内部字段一并取出,导出层没有白名单。字段后来新增时,导出会自动带上,没人察觉。这一点先确认清楚,后面就不用反复试。
$fields = ['order_no', 'sku', 'qty', 'price'];
$sql = 'SELECT ' . implode(',', $fields) . ' FROM orders WHERE ...';
围绕「导出隐藏字段」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
处理上按这个顺序:导出查询改成显式列名 不用星号;按角色维护可导出字段白名单 在服务端过滤;拿经销商账号导一次 逐列核对表头。
结果对不对很好判断,经销商导出只有 4 列,成本价和毛利率不再出现。
