You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动