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

Php json_encode在windows上返回整数值,在linux上返回字符串,php,laravel,json,Php,Laravel,Json,我最近遇到了一个奇怪的问题。我目前正在Windows环境下进行开发,同时在Linux服务器上进行部署,我知道这并不理想,但我在现阶段对此无能为力 我所做的只是从数据库中获取数据,然后返回结果数组的JSON响应,但结果不同,这在我的前端应用程序中造成了问题 我在windows上看到这个: { "id":40, "name":"test" } 在Linux上: { "id":"40", "name":"test" } 我实际上使用的是Laravel框架,因此语

我最近遇到了一个奇怪的问题。我目前正在Windows环境下进行开发,同时在Linux服务器上进行部署,我知道这并不理想,但我在现阶段对此无能为力

我所做的只是从数据库中获取数据,然后返回结果数组的JSON响应,但结果不同,这在我的前端应用程序中造成了问题

我在windows上看到这个:

{
    "id":40,
    "name":"test"
}
在Linux上:

{
     "id":"40",
     "name":"test"
}
我实际上使用的是Laravel框架,因此语法简单如下:

$user = User::find($id);
return Response::json($user->toArray());
在幕后做这件事的是:

$this->data = json_encode($data);
所以不幸的是,我没有一个钩子来设置
JSON\u NUMERIC\u CHECK
选项

在重构我的代码之前,有没有办法对所有
JSON\u encode
调用强制执行
JSON\u NUMERIC\u CHECK
?我使用同一个数据库获取数据,所以我想这可能是一个与平台相关的问题

编辑:

进一步的调查使我认为罪犯可能是数据库驱动程序。 如果我在windows上转储数据,我会得到以下结果:

 array
      'id' => int 40
      'name' => string 'test' (length=4)
在Linux上,它是:

array
     'id' => string '40' (length=2)
     'name' => string 'test' (length=4)

Laravel使用PDO,PDO使用MySQL驱动程序。它是mysql或mysqlnd

只有mysqlnd提供正确的数据类型。所以查询整数返回整数。 另一个驱动程序以字符串形式返回所有数据。
您还可以检查PDO是否不使用语句准备模拟。

php是什么版本?我将详细了解PHPSRC。我在Windows上有5.3.9,在Linux上有5.4.17,但我认为这不是php的问题,而是数据库驱动程序的问题。我已经在我的问题中添加了从数据库返回的数据转储。好的,那么你可以说你使用的是什么数据库,你使用的是什么驱动程序?我正在使用一个Mysql数据库,并通过PDO查询它。我不是直接查询它,我使用的是来自Laravel Framework的内置ORM库,Eloquent.PDO使用MySQL API驱动程序。只有mysqlnd提供正确的数据类型。所以查询整数返回整数。另一个驱动程序以字符串形式返回所有数据。还可以检查PDO不使用语句准备模拟。