使用MySQL时,PDO始终将字段值作为字符串返回。使用MSSQL等其他数据库时,PDO是否一致?
如果没有,是否有一个标志强制PDO始终返回字符串(为了保持一致性)?或者更好的是还是为所有值返回原生类型?
据我所知,Drupal可以使用PDO使用不同的数据库。它执行必要的转换以使SQL语句与不同的语法兼容。但它如何处理查询结果中的数据类型?
答案 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中为布尔字段返回t
或f
个字符串,我模糊地回忆起它返回了true
或false
布尔值我最后一次使用它。
在检查getColumnMeta()之后,您可以将结果规范化为本机类型:
http://us3.php.net/manual/en/pdostatement.getcolumnmeta.php
但这样做会附带几个字符串。 php手册中的警告是一个。从引擎返回到下一个引擎的不一致值是另一个: