我已经在Stack Overflow上重复了几次这个问题,但是没有一个人充分探讨这个问题(或者至少以对我有帮助的方式)
问题在于,数据库查询应在PHP中为整数列返回整数数据类型。而是查询将每一列作为字符串类型返回。
我已经确保“ PDO :: ATTR_STRINGIFY_FETCHES”为false只是为了确保结果不会被强制转换为字符串。
我见过的答案:
- 做不到
- 不,它可以在安装了PHP / MySQL的Mac OS X上运行
- 在您的代码中键入强制转换所有值
- 不,我不会那样做
- 不用担心,PHP是松散类型的
- 我的数据以JSON格式输出,并由许多其他服务使用,其中一些服务要求数据格式正确
从我的研究中,我知道这是驱动程序实施的问题。
许多消息来源声称MySQL本机驱动程序不支持返回数字类型。这似乎并不正确,因为它可以在Mac OS X上运行。除非他们的意思是说“ Linux上的MySQL本机驱动程序不支持该功能”。
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处。我一直在尝试找出差异以便应用修复程序,但是我对如何检查这些问题的知识感到受限制。
区别:
- OS X上的PHP是通过Home Brew编译并安装的
- 通过“ apt-get install php5-dev”在Ubuntu上安装PHP
- OS X上的PHP正在连接到也在OS X上运行的MySQL服务器
- 服务器版本:5.1.71-log源分发
- Ubuntu上的PHP正在连接到Rackspace云数据库
- 服务器版本:5.1.66-0 + squeeze1(Debian)
Ubuntu环境
- 版本:10.04.1
- PHP 5.4.21-1 + debphp.org〜lucid + 1(cli)(建立:2013年10月21日08:14:37)
php -i
pdo_mysql
MySQL的PDO驱动程序=>启用的客户端API版本=> 5.1.72
Mac OS X环境
- 10.7.5
- PHP 5.4.16(CLI)(建立:2013年8月22日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,
任何帮助和专业知识将不胜感激:)如果我找到答案,我一定会在这里发布。