【问题标题】:php pdo emulate_prepares false stringify_fetches false int still string [duplicate]php pdo emulate_prepares false stringify_fetches false int still string [重复]
【发布时间】:2025-12-22 14:25:13
【问题描述】:

当我在 Hostgator 上托管的网站上从 MySQL 数据库中获取数据时,我正在尝试获取要输出的数字。 PHP 7.0,MySQL - 服务器版本:5.5.48-37.8 - Percona Server (GPL),版本 37.8,修订版 727,数据库客户端版本:libmysql - 5.1.73。

PDO 参数:

[
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_STRINGIFY_FETCHES => false,
]

即使有这些属性,它仍然返回整数作为字符串。 我该如何解决这个问题?

【问题讨论】:

  • 你的整数是如何存储在数据库中的?
  • 显示实际查询/获取代码...
  • 代码中涉及到抽象,但是查询到的只是SELECT id, name FROM merchants ORDER BY name ASC。最后调用PDOStatement::fetchAll(),返回['id' => '1', 'name' => 'foo']。抓取后没有对数据进行任何修改。
  • 对于那些认为这是重复的人 (@JayBlanchard) - 我已经清楚地尝试了我可以在代码中做的事情来尝试解决问题。他们没有帮助。提到的重复主题不提供任何其他修复,除了设置 mysqlnd,我不能这样做,因为这是共享主机。
  • 如果您无法使用答案,它不会使您的问题不重复。

标签: php mysql pdo


【解决方案1】:

您是否看过这个 SO 问题:How to get numeric types from MySQL using PDO? 另外,请确保您已安装并激活了 mysqlnd。查看pdo_mysql 下的php --info

如果是,输出应该是这样的:

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id:___ $

如果未安装,请使用以下命令安装:

apt-get remove php5-mysql
apt-get install php5-mysqlnd
service apache2 restart

如果这不能解决问题,问题可能出在您没有向我们展示的代码中。

希望这会有所帮助! 干杯!

【讨论】:

  • >托管在 Hostgator... 问题不在代码中。它可以在我的家用机器上运行,但不能在服务器上运行,因为获取的整数是在那里转换的。
  • 看起来mysqlnd安装在你的家用机器上,但没有安装主机gator。
  • 如果不尝试让 Hostgator 安装 mysqlnd,就没有办法解决这个问题吗?
  • 澄清一下,查询的结果是由hostgator返回的,php会解释这个结果。