Lumen更新表字段报错SQLSTATE[42S22]:未知列'0'在字段列表中
问题分析与解决方案
你的问题出在错误地将更新字段拼接成字符串,而Laravel/Lumen的update()方法需要接收一个关联数组,而非字符串。
为什么会报错?
你原来的代码把$field拼成了类似'category' => 'fgfg' , 'sub_category' => 'ggg'的字符串,然后传给update()的时候用了['$field']——这会被解析成一个索引数组,键是0,值是你拼接的字符串。所以Laravel生成的SQL就变成了update expencedetails set 0 = '$field的内容' where id = 1,数据库自然找不到名为0的列,触发了Column not found错误。
正确的写法
我们应该直接用数组来存储要更新的字段和值,而不是拼接字符串:
// 初始化空数组,用于存放要更新的字段 $updateFields = []; if ($request->input('category')) { // 直接向数组添加键值对 $updateFields['category'] = $request->input('category'); } if ($request->input('subcategory')) { $updateFields['sub_category'] = $request->input('subcategory'); } // 直接把数组传给update方法 $Expence = DB::table('expencedetails') ->where('id', $request->input('id')) ->update($updateFields);
额外优势
这种写法不仅解决了报错问题,还自带SQL注入防护——Laravel会自动对数组中的值进行参数绑定,避免了直接拼接字符串带来的安全风险。同时代码也更简洁易读,维护起来更方便。
内容的提问来源于stack exchange,提问作者JIJOMON K.A




