我已经在Stack Overflow上重复了几次这个问题,但是没有一个人充分探讨这个问题(或者至少以一种对我有帮助的方式)
问题在于,数据库查询应在PHP中为整数列返回整数数据类型。而是查询将每一列作为字符串类型返回。
我已经确保“ PDO :: ATTR_STRINGIFY_FETCHES”为 false 只是为了确保结果不会被强制转换为字符串。
我见过的答案:
根据我的研究,我知道这是驱动程序实施的问题。
许多消息来源声称MySQL本机驱动程序不支持返回数字类型。由于它可以在Mac OS X上运行,因此似乎并非如此。除非他们的意思是说“ Linux 上的MySQL本机驱动程序不支持该功能”。
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处。我一直在尝试找出差异以便应用修复程序,但我对如何检查这些问题的知识感到受限制。
pdo_mysql
MySQL的PDO驱动程序=>启用的客户端API版本=> 5.1.72
适用于MySQL的PDO驱动程序=>启用的客户端API版本=> mysqlnd 5.0.10-20111026-$ Id:e707c415db32080b3752b232487a435ee0372157 $
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,
任何帮助和专业知识将不胜感激:)如果我找到答案,我一定会在这里发布。
解决方案是确保您使用的是php 的 mysqlnd 驱动程序。
查看时php -i, 不会 提及“ mysqlnd”。该pdo_mysql部分将具有以下内容:
php -i
pdo_mysql PDO Driver for MySQL => enabled Client API version => 5.1.72
大多数L / A / M / P的安装指南都建议使用,apt-get install php5-mysql但MySQL的本机驱动程序是通过其他软件包安装的:php5-mysqlnd。我发现这可用于 ppa:ondrej / php5-oldstable 。
apt-get install php5-mysql
php5-mysqlnd
要切换到新驱动程序(在Ubuntu上):
删除旧驱动程序: apt-get remove php5-mysql
apt-get remove php5-mysql
安装新的驱动程序: apt-get install php5-mysqlnd
apt-get install php5-mysqlnd
重新启动apache2: service apache2 restart
service apache2 restart
现在php -i将在该pdo_mysql部分中明确提及“ mysqlnd” :
pdo_mysql PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
确保PDO::ATTR_EMULATE_PREPARES是false(检查默认值或进行设置): $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
PDO::ATTR_EMULATE_PREPARES
false
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
确保PDO::ATTR_STRINGIFY_FETCHES是false(检查默认值或进行设置): $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
PDO::ATTR_STRINGIFY_FETCHES
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
†值大于64位有符号整数(9223372036854775807)的BIGINT将作为字符串返回(或在32位系统上为32位)
object(stdClass)[915] public 'integer_col' => int 1 public 'double_col' => float 1.55 public 'float_col' => float 1.5 public 'decimal_col' => string '1.20' (length=4) public 'bigint_col' => string '18446744073709551615' (length=20)