PDO + MySQL 总是返回字符串,但是 MsSQL 呢?

Posted

技术标签:

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

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

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

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

【问题讨论】:

这可能有用:blogs.msdn.com/b/sqlphp/archive/2011/01/25/… 【参考方案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);

【讨论】:

以上是关于PDO + MySQL 总是返回字符串,但是 MsSQL 呢?的主要内容,如果未能解决你的问题,请参考以下文章

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

mysql返回修改后

PHP PDO 使用 SSL 连接到 MS SQLServer Express

PDO 不返回任何结果,而 MySQL 命令行返回预期结果

MySQL 全文连字符和大括号返回错误(最初:PDO 准备好的语句没有做它的工作?)

MySQL与PDO [重复]