如何在PHP中将MySQL中的整数和数字列作为整数和数字返回?
问题是数据库查询应该在 PHP 中为整数列返回整数数据类型。相反,查询将每列作为字符串类型返回。
我确保“PDO::ATTR_STRINGIFY_FETCHES”如果为假,只是为了确保结果不会被强制转换为字符串。
我看到的答案:
- 这是无法做到的
- 不,它正在Mac OS X上安装PHP / MySQL
- 在代码中对所有值进行类型转换
- 不,我不会那样做
- 别担心,PHP是松散类型的
- 我的数据输出为 JSON,并由许多其他服务使用,有些服务需要正确格式的数据
根据我的研究,我知道这是一个驱动程序实现问题。
许多消息来源声称MySQL本机驱动程序不支持返回数字类型。这似乎不是真的,因为它可以在Mac OS X上运行,除非他们的意思是说“Linux上的MySQL本机驱动程序不支持该功能”。
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处。我一直在尝试识别差异以应用修复程序,但我受到如何检查这些内容的知识的限制。
区别:
- OS X上的PHP是通过Home Brew编译和安装的
- Ubuntu 上的 PHP 是通过 “apt-get install php5-dev” 安装的
- OS X 上的 PHP 正在连接到也在 OS X 上运行的 MySQL 服务器
- 服务器版本:5.1.71 日志源分发
- Ubuntu 上的 PHP 正在连接到 Rackspace Cloud Database
- 服务器版本: 5.1.66-0+squeeze1 (Debian)
乌班图环境
-
版本: 10.04.1
-
PHP 5.4.21-1+debphp.org~lucid+1 (cli) (建版本: Oct 21 2013 08:14:37)
-
php -i
pdo_mysql
适用于 MySQL 的 PDO 驱动程序 = 启用 > 客户端 API 版本 = > 5.1.72
Mac OS X 环境
-
10.7.5
-
PHP 5.4.16 (cli) (建設: Aug 22 2013 09:05:58)
-
php -i
pdo_mysql
适用于 MySQL 的 PDO 驱动程序 = > 启用的客户端 API 版本 => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
使用的 PDO 标志
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,