json_encode在windows上返回整数值,在linux上返回字符串

Ing*_*gro 4 php json laravel

我最近出现了这个奇怪的问题.我目前正在Windows环境中进行开发,而在Linux服务器上进行部署时,我知道这并不理想,但在此阶段我无法做很多事情.

我所做的只是从数据库获取数据,然后返回结果数组的JSON响应,但结果不同导致我的前端应用程序出现问题.

我在Windows上得到这个:

{
    "id":40,
    "name":"test"
}
Run Code Online (Sandbox Code Playgroud)

这在Linux上:

{
     "id":"40",
     "name":"test"
}
Run Code Online (Sandbox Code Playgroud)

我实际上使用的是Laravel框架,所以语法就是这样:

$user = User::find($id);
return Response::json($user->toArray());
Run Code Online (Sandbox Code Playgroud)

幕后背后是这样做的:

$this->data = json_encode($data);
Run Code Online (Sandbox Code Playgroud)

所以不幸的是我没有钩子在哪里设置JSON_NUMERIC_CHECK选项.

在重构我的代码之前,有没有办法强制JSON_NUMERIC_CHECK所有json_encode调用?我正在使用相同的数据库来获取数据,所以我猜它可能是一个与平台相关的问题?

编辑:

进一步的调查使我认为有罪可能是数据库驱动程序.如果我在Windows上转储数据我得到这个:

 array
      'id' => int 40
      'name' => string 'test' (length=4)
Run Code Online (Sandbox Code Playgroud)

在Linux上它是:

array
     'id' => string '40' (length=2)
     'name' => string 'test' (length=4)
Run Code Online (Sandbox Code Playgroud)

小智 6

Laravel使用PDO和PDO使用MySQL驱动程序.这是mysql或mysqlnd.

只有mysqlnd提供了正确的数据类型.所以查询整数返回整数.另一个驱动程序将所有数据作为字符 您还可以检查PDO是否使用语句准备仿真.