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

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

【问题讨论】:

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

标签: php mysql sql-server pdo


【解决方案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 实例运行 本机准备语句

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2011-08-26
    • 2012-08-18
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多