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

时间:2011-05-16 12:27:17

标签: php mysql sql-server pdo

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

如果没有,是否有一个标志强制PDO始终返回字符串(为了保持一致性)?或者更好的是还是为所有值返回原生类型?

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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()