【问题标题】:json_encode return integer values on windows and string on linuxjson_encode 在 windows 上返回整数值,在 linux 上返回字符串
【发布时间】:2013-07-30 10:27:07
【问题描述】:

我最近出现了这个奇怪的问题。我目前正在 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_encode 调用中强制使用 JSON_NUMERIC_CHECK?我正在使用同一个数据库来获取数据,所以我猜这可能是一个与平台相关的问题?

编辑:

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

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

在 Linux 上是:

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

【问题讨论】:

  • php 是什么版本?我会看看 php-src 的详细信息。
  • 好吧,我在 Windows 上有 5.3.9,在 Linux 上有 5.4.17,但我认为这不是 PHP 问题,而是数据库驱动程序问题。我已将从数据库返回的数据转储添加到我的问题中。
  • 好的,那你说说你用什么DB,用什么驱动?
  • 我正在使用 Mysql 数据库并通过 PDO 查询它。好吧,我不是直接查询它,我使用的是 Laravel 框架的内置 ORM 库,Eloquent。
  • PDO 使用 MySQL API 驱动程序。只有 mysqlnd 提供正确的数据类型。所以查询整数返回整数。另一个驱动程序将所有数据作为字符串返回。您还可以检查 PDO 不使用语句准备仿真。

标签: php laravel json


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多