Laravel修改管理员密码报SQLSTATE[42S22未知列'0'错误如何解决?
错误根因
该报错和timestamp字段配置无任何关联,属于控制器代码的语法错误:
你在调用update方法更新密码时,错误使用了相等比较运算符==来构造数组键值对,而不是PHP数组要求的键值关联运算符=>。
你的错误代码如下:
Admin::where('id', Auth::guard('admin')->user()->id)->update(['password' == bcrypt($data['new_password'])]);
这里的'password' == bcrypt($data['new_password'])是布尔判断逻辑,返回结果为布尔值false,PHP会自动转成数值0,最终你传给update方法的参数实际是[0 => 0],Laravel解析时会把数组键0作为要更新的数据库字段名,才会触发Unknown column '0' in 'field list'的SQL报错。
修复方法
只需要把对应代码行的==替换为=>即可正常运行:
Admin::where('id', Auth::guard('admin')->user()->id)->update(['password' => bcrypt($data['new_password'])]);
优化建议
你可以直接用已经获取到的管理员登录实例调用更新方法,简化代码逻辑:
Auth::guard('admin')->user()->update(['password' => bcrypt($data['new_password'])]);
另外建议补充新密码的校验规则,比如最小长度、复杂度要求,降低安全风险。
内容的提问来源于stack exchange,提问作者Zunain Shareef
相关产品推荐
相关产品推荐

