You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel登录功能触发SQLSTATE[42S22]错误,请求排查修复

解决Laravel登录时SQLSTATE[42S22]列未找到错误

你碰到的这个SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in where clause错误,根源其实很明确——你构造$user_data时多套了一层数组,导致Auth组件识别错误。

问题本质

Auth::attempt()方法需要接收一维关联数组(键对应数据库字段名,值是用户输入内容),但你当前的代码生成的是嵌套数组,结构大概是这样:

[
    [
        'name' => '输入的用户名',
        'password' => '输入的密码'
    ]
]

Laravel在处理这个嵌套数组时,会把外层索引数组的键0当成数据库字段去查询,自然就会抛出“找不到列'0'”的报错。

修复代码

只需要修改LoginController里构造$user_data的代码,去掉多余的外层数组包裹即可:

class LoginController extends Controller {
    function index() {
        return view('login');
    }
    function checklogin(Request $request) {
        $this->validate($request, [
            'name' => 'required',
            'password' => 'required'
        ], ['name.required' => 'Gebruikersnaam is niet ingevuld of niet goed.', 'password.required' => 'Wachtwoord is niet ingevuld of niet goed.']);
        
        // 移除外层多余的[],直接生成一维关联数组
        $user_data = [
            'name' => $request->get('name'),
            'password' => $request->get('password')
        ];
        
        if (Auth::attempt($user_data)) {
            return redirect('login/succeslogin');
        } else {
            return back()->with('error', 'Verkeerde login gegevens!');
        }
    }
    function succeslogin() {
        return view('succeslogin');
    }
    function logout() {
        Auth::logout();
        return redirect('login');
    }
}

额外注意事项

还有个小细节需要留意:你的模型命名为Login,但Laravel默认的Auth系统会使用User模型。如果你的数据库表是默认的users表,建议把模型改回User;如果想保留Login模型,需要在config/auth.php中修改providers.users.model的值为App\Models\Login::class,避免后续出现其他Auth相关的适配问题。

内容的提问来源于stack exchange,提问作者WaterMetMelk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:14:25