当我试图在查询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修复了问题,以强制加载我的配置。

09-18 19:22