首页 >数据库 >mysql教程 >为什么我的 PHP MySQL 数字列结果有时是字符串而不是整数或浮点数?

为什么我的 PHP MySQL 数字列结果有时是字符串而不是整数或浮点数?

DDD
DDD原创
2024-12-10 16:18:10921浏览

Why are my PHP MySQL numeric column results sometimes strings instead of integers or floats?

从 MySQL 返回整数和数字作为 PHP 类型

尽管将 PDO::ATTR_STRINGIFY_FETCHES 设置为 false,您可能会遇到数字列的问题仍然以字符串形式返回,而不是整数或数字。此行为通常归因于驱动程序实现问题。

mysqlnd 差异

解决此问题的关键在于确保您使用 mysqlnd PHP 驱动程序。查看 php -i 时,pdo_mysql 部分中缺少“mysqlnd”表示正在使用本机驱动程序。

安装 mysqlnd

在 Ubuntu 上,安装php5-mysqlnd 而不是 php5-mysql。为了确保成功过渡,请按照以下步骤操作:

  1. 删除旧驱动程序:apt-get remove php5-mysql
  2. 安装新驱动程序:apt-get install php5-mysqlnd
  3. 重新启动 Apache:service apache2重新启动

验证 mysqlnd

安装 php5-mysqlnd 后,php -i 现在应该在 pdo_mysql 部分明确提及“mysqlnd”。

PDO 设置

设置以下 PDO 属性以确保正确的数据处理:

  • PDO::ATTR_EMULATE_PREPARES: false
  • PDO::ATTR_STRINGIFY_FETCHES: false

已返回值

使用正确的驱动程序和设置,数字列将作为适当的 PHP 类型返回:

  • 浮点类型(FLOAT、DOUBLE):PHP float
  • 整数类型(INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT):PHP整数
  • 定点类型(DECIMAL、NUMERIC):字符串
    (注意:超过 64 位有符号整数的 BIGINT 在 64 位系统上将作为字符串返回。)

例如以下数据:

+-----------+-----------+----------+-------------+--------------+
| integer_col | double_col | float_col | decimal_col | bigint_col    |
+-----------+-----------+----------+-------------+--------------+
| 1          | 1.55      | 1.5      | 1.20        | 18446744073709551615 |
+-----------+-----------+----------+-------------+--------------+

将会返回如:

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)

以上是为什么我的 PHP MySQL 数字列结果有时是字符串而不是整数或浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn