【问题标题】:PDO + MySQL always returns strings, but what about MsSQL?PDO + MySQL 总是返回字符串,但是 MsSQL 呢?
【发布时间】:2011-08-26 10:01:53
【问题描述】:

使用 MySQL 时,PDO 总是将字段值作为字符串返回。使用 MSSQL 等其他数据库时 PDO 是否一致?

如果没有,是否有一个标志强制 PDO 总是返回字符串(为了保持一致性)?还是更好地为所有值返回本机类型?

据我所知,Drupal 使得使用 PDO 使用不同的数据库成为可能。它执行必要的转换以使 SQL 语句与不同的语法兼容。但是它是如何处理查询结果中的数据类型的呢?

【问题讨论】:

标签: php mysql sql-server pdo


【解决方案1】:

据我所知,这取决于数据库引擎。

前段时间,PDO 会为 Postgres 中的布尔字段返回 tf 字符串,我隐约记得我上次使用它时返回的是 truefalse 布尔值。

您可以在检查 getColumnMeta() 后将结果归一化为原生类型:

http://us3.php.net/manual/en/pdostatement.getcolumnmeta.php

不过,这样做会附带一些条件。 php 手册中的警告是其中之一。从一个引擎返回到下一个引擎的不一致值是另一个:

List of PHP native_type's for PDO getColumnMeta()

【讨论】:

    【解决方案2】:

    如果您想确保始终获得字符串,您可以使用 bindColumn() 并为每列指定数据类型

    $sql = 'SELECT id, name FROM test';
    $stmt = $dbh->query($sql);
    /* Bind by column number */
    $stmt->bindColumn(1, $id, PDO::PARAM_STR); //or PDO::PARAM_INT
    $stmt->bindColumn(2, $name, PDO::PARAM_STR);
    while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
      var_dump($id); var_dump($name);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 2017-01-25
      • 1970-01-01
      • 2016-12-16
      • 2019-07-25
      • 1970-01-01
      • 2012-07-31
      • 2022-12-19
      相关资源
      最近更新 更多