问题在于,DB查询应该在PHP中为整数列返回整数数据类型.相反,查询以字符串类型返回每一列.
我已经确保"PDO::ATTR_STRINGIFY_FETCHES"如果为false,只是为了确保结果不会被转换为字符串.
我看到的答案是:
- 这是做不到的
- 不能,它可以在安装了PHP/MySQL的Mac OS X上运行
- 在代码中键入强制转换所有值
- 不,我不会那么做的
- 别担心,PHP是松散类型的
从我的研究中,我了解到这是一个驱动程序实现问题.
许多来源声称MySQL本机驱动程序不支持返回数值类型.这似乎不是真的,因为它可以在MacOSX上运行,除非他们的意思是说"Linux上的MySQL本机驱动程序不支持该功能".
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处.我一直在try 找出差异,以便应用修复程序,但我对如何判断这些方面的知识有限.
不同之处在于:
- OS X上的PHP是通过Home Brew编译和安装的
- Ubuntu上的PHP是通过"apt-get install php5-dev"安装的
- OS X上的PHP正在连接到也在OS X上运行的MySQL服务器
- 服务器版本:5.1.71-日志(log)源分发
- Ubuntu上的PHP正在连接到Rackspace云数据库
- 服务器版本:5.1.66-0+Squze1(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)(Build:Aug 22 2013 09:05:58)
-
php-i
pdo_mysql
MySQL的PDO驱动程序=>;启用
使用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,