首页 > 后端开发 > php教程 > 为什么 MySQL 数字列在 PHP 中以字符串形式返回?如何确保它们以整数或浮点数形式返回?

为什么 MySQL 数字列在 PHP 中以字符串形式返回?如何确保它们以整数或浮点数形式返回?

Susan Sarandon
发布: 2024-11-24 11:21:14
原创
531 人浏览过

Why are MySQL numeric columns returned as strings in PHP, and how can I ensure they are returned as integers or floats?

如何从 MySQL 返回整数和数字列作为 PHP 整数和数字

问题陈述

某些基于 PHP 的应用程序可能会遇到以下问题: MySQL 查询的结果以字符串形式返回,而不是以正确的整数或数字数据类型返回。尽管将 PDO 属性 PDO::ATTR_STRINGIFY_FETCHES 设置为 false 以防止字符串转换,但还是会发生这种情况。

驱动程序注意事项

需要注意的是,MySQL 驱动程序在确定数字类型是否为数字类型方面发挥着重要作用。以整数或数字形式返回。某些驱动程序(例如 Linux 上的 MySQL 本机驱动程序)不完全支持此功能。

但是,通过第三方存储库可用于 Linux 发行版的 mysqlnd 驱动程序确实支持此功能。支持此功能。确保在 PHP 环境中使用 mysqlnd 驱动程序至关重要。

在 Ubuntu 上安装 mysqlnd 驱动程序

要在 Ubuntu 上从本机 MySQL 驱动程序切换到 mysqlnd,请按照以下步骤操作:

  1. 卸载本机驱动程序:apt-get remove php5-mysql
  2. 安装 mysqlnd 驱动程序: apt-get install php5-mysqlnd
  3. 重新启动 Apache:service apache2 restart

验证驱动程序使用

安装mysqlnd后,通过运行php确认它正在使用 -我。在 pdo_mysql 部分中查找以下条目:

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
登录后复制

PDO 设置

确保正确设置以下 PDO 属性:

  • PDO::ATTR_STRINGIFY_FETCHES : 设置为 false 以防止字符串
  • PDO::ATTR_EMULATE_PREPARES:设置为 false 以提高性能。

返回值类型

配置这些设置后,MySQL 将返回数字类型为如下:

  • 浮点类型(FLOAT、 DOUBLE)作为 PHP 浮点数
  • 整数类型(INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT)作为 PHP 整数
  • 定点类型(DECIMAL、NUMERIC)作为字符串(带有值的 bigint)超过 64 位也可能返回为strings)

例如,以下 PHP 代码将输出预期的数据类型:

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$stmt = $pdo->prepare("SELECT * FROM table");
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_OBJ);

echo "<pre class="brush:php;toolbar:false">";
print_r($row);
echo "
";
登录后复制

输出:

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)
登录后复制

以上是为什么 MySQL 数字列在 PHP 中以字符串形式返回?如何确保它们以整数或浮点数形式返回?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板