首页 >后端开发 >php教程 >如何确保 MySQL 数字和整数列在 PHP 中作为正确的数据类型返回?

如何确保 MySQL 数字和整数列在 PHP 中作为正确的数据类型返回?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-05 15:15:10341浏览

How Can I Ensure MySQL Numeric and Integer Columns Are Returned as the Correct Data Type in PHP?

在 PHP 中将 MySQL 数字和整数列转换为整数

问题概述

PHP 查询通常将所有列返回为字符串,即使在处理整数时也是如此或 MySQL 中的数值。当处理具有特定格式要求的数据时,例如多个服务使用的 JSON 输出,这可能会出现问题。

驳斥常见的误解

虽然一些消息来源声称不可能返回数字类型,但这是不完全正确。可以消除以下误解:

  • 类型转换:在代码中手动转换值效率低下,并且可能会导致不一致。
  • 松散打字:PHP 的松散类型不是一个可靠的解决方案,因为数据可能会无意中转换为strings.
  • 驱动程序限制:Linux 上的 MySQL 本机驱动程序不完全支持返回数字类型。不过,有一个解决方法可以确保正确处理。

解决方案

解决此问题的关键是使用 PHP 的 mysqlnd 驱动程序。与本机驱动程序不同,mysqlnd 支持返回整数(INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT)和双精度浮点(DOUBLE)列的数字类型。

安装并确认 mysqlnd

要验证您是否使用 mysqlnd,请运行 php -i。如果 pdo_mysql 部分提到“mysqlnd”,则表明驱动程序存在。否则,请按照以下步骤安装它:

Ubuntu:

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

确认存在:安装后,php -i 现在应该在 pdo_mysql 部分显示 mysqlnd 版本。

PDO 设置

此外,请确保设置以下 PDO 设置正确:

  • PDO::ATTR_EMULATE_PREPARES 应为 false
  • PDO::ATTR_STRINGIFY_FETCHES 应为 false

返回值类型

  • FLOAT 和 DOUBLE 列是以 PHP 浮点数形式返回。
  • INTEGER 列以 PHP 整数形式返回。
  • DECIMAL 和 NUMERIC 列以字符串形式返回。

示例

通过 mysqlnd 和正确的 PDO 设置,您现在可以查询 MySQL 表并获取预期的数值格式:

$result = $pdo->query('SELECT * FROM table');
$row = $result->fetch(PDO::FETCH_OBJ);

echo $row->integer_col; // 1 (integer)
echo $row->double_col; // 1.55 (float)
echo $row->decimal_col; // '1.20' (string)

以上是如何确保 MySQL 数字和整数列在 PHP 中作为正确的数据类型返回?的详细内容。更多信息请关注PHP中文网其他相关文章!

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