当我试图在查询MySQL数据库后返回JSON响应时,Lumen 5.3有问题。
我的方案和所有表都编码在utf8_general_ci
中,这是导致我遇到问题的代码示例:
public function getUserByMail(Request $request){
$user = app('db')->table('user')->select('id','lastName', 'firstName','mail','status')->where('mail',$request->input('userMail'))->first();
return response()->json(
array('id' => $user->id,
'lastName' => $user->lastName,
'firstName' => $user->firstName,
'mail' => $user->mail,
'status' => $user->status));
}
有时(但仅有时),这段代码在调用
Malformed UTF-8 characters, possibly incorrectly encoded
方法时抛出异常json()
。我不知道该怎么办,有人知道吗?
最佳答案
我终于明白发生了什么:当我在Wamp安装上运行Lumen时,由于配置加载问题,我遇到了这个错误。
Lumen框架使用DotEnv
加载指定数据库连接信息的.env
文件。但在某些情况下(我怀疑PHP多线程支持出现故障),我的请求使用了Laravel(forge@localhost
)的默认数据库登录来访问数据库,而数据库的默认登录失败了(Lumen异常处理程序没有捕获到遇到的PDOException
),并且我的$user
变量不包含我所期望的内容,这导致了UTF-8错误。
Lumen GitHub(here)中提到了此问题。
我使用此workaround修复了问题,以强制加载我的配置。