在我的开发服务器上,来自Laravel 5控制器的JSON响应以正确的类型显示数据。
例如
imdb_rating: 7.6 imdb_votes: 6271
但是在生产服务器上,JSON响应作为字符串发送回。
imdb_rating: "7.60" imdb_votes: "6271"
开发和生产都安装了相同版本的PHP(5.6.11-1)。
关于什么可能导致这种行为的任何想法?
确保使用支持本机数据类型的 MySQL本机驱动程序 。
如果使用mysqlnd库,可以通过设置MYSQLI_OPT_INT_AND_FLOAT_NATIVE连接选项将整数和浮点数列转换回PHP数字。如果设置,则mysqlnd库将检查结果集元数据列类型,并将SQL数值列转换为PHP数字(如果PHP数据类型值范围允许)。这样,例如,SQL INT列将作为整数返回。
MySQL客户端库将所有字段作为字符串返回。
另一种解决方案是将json_encode选项与一起使用JSON_NUMERIC_CHECK。
JSON_NUMERIC_CHECK
例如:
return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);