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 时返回字符串的主要内容,如果未能解决你的问题,请参考以下文章
SQLSRV 驱动程序与带有 MS SQL Server 的 PHP 的 PDO 驱动程序
php以pdo方式连接sqlserver,无法开启sqlsrv扩展