PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

Posted

技术标签:

【中文标题】PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串【英文标题】:PDO SQLSRV and PDO MySQL return strings when fetching int or float 【发布时间】:2016-11-13 21:51:06 【问题描述】:

PDO MS SQL Server 和 PDO mysql 都在您获取时返回一个字符串数组,即使列的 SQL 类型本来应该是数字类型,例如 int 或 float。我设法解决了这个问题,但我想了解为什么它们一开始就是这样设计的。是不是因为PDO本身不支持(或者之前不支持)?

【问题讨论】:

列的类型无关紧要,它只是定义可以存储在其中的内容,而不是当您从中获取内容时返回的内容的类型。默认情况下,PDO 返回的所有内容都是字符串,但 php 会进行类型处理,因此 $var = 10;$var = "10";(整数和字符串,均分配为 10)都被视为数字。 【参考方案1】:

使用 PDO MySQL the underlying C API 在调用 mysql_fetch_row() 时返回 a structure of strings。由于 PHP 是一种松散类型的语言,它会根据需要自动转换为整数,我怀疑 PDO 开发人员选择按原样返回它们。这比查找每个列类型并动态转换为整数/浮点数要快。

特别是关于浮点数,当从字符串转换时,原生 PHP 浮点数可能与原始存储值不同。例如,MySQL 列支持精度,而 PHP 浮点数不支持。将浮点数作为字符串保留在数据库中可以让您进行更多控制(例如,选择使用具有不同精度的 a library)。

【讨论】:

还有一个prepared statement【参考方案2】:

因为 PDO 本身不支持(或者之前不支持)?

几乎是的,但对于 mysql,这不是因为 PDO,而是因为 mysql C API。

因为它是changed,目前是PDO can return correct datatypes,如果您对基于 mysqlnd 的 PDO 实例运行 本机准备语句

【讨论】:

以上是关于PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 pdo_sqlsrv 执行存储过程

SQLSRV 驱动程序与带有 MS SQL Server 的 PHP 的 PDO 驱动程序

php以pdo方式连接sqlserver,无法开启sqlsrv扩展

无法使用PDO SQLSRV将数据插入SQL db

thinkphp数据库PDO::SQLSRV_ATTR_ENCODING错误的解决

如何在我的 windows 2008 Server 2008 R2 上安装 pdo_sqlsrv? [关闭]