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 中的布尔字段返回 t
或 f
字符串,我隐约记得我上次使用它时返回的是 true
或 false
布尔值。
您可以在检查 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 时返回字符串
PHP PDO 使用 SSL 连接到 MS SQLServer Express