我最近出现了这个奇怪的问题。我目前正在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_NUMERIC_CHECK
选项。
在重构我的代码之前,有没有办法强制JSON_NUMERIC_CHECK
所有json_encode
来电?我使用相同的数据库来获取数据,所以我猜它可能是平台相关的问题?
修改
进一步的调查使我认为有罪可能是数据库驱动程序。 如果我将数据转储到Windows上,我就得到了这个:
array
'id' => int 40
'name' => string 'test' (length=4)
在Linux上它是:
array
'id' => string '40' (length=2)
'name' => string 'test' (length=4)
答案 0 :(得分:6)
Laravel使用PDO,PDO使用MySQL驱动程序。这是mysql或mysqlnd。
只有mysqlnd提供正确的数据类型。所以查询整数返回整数。 另一个驱动程序将所有数据作为字符 您还可以检查PDO是否使用语句准备仿真。