2011-05-16 109 views
6

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

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

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

+0

这可能是有用的:http://blogs.msdn.com/b/sqlphp/archive/2011/01/25/drupal-7-and-sql-server-our-pdo-journey.aspx – Spudley 2011-05-16 12:45:18

回答

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); 
} 
+0

谢谢,我不知道PDO可以这样使用。 – 2011-05-18 20:47:39

1

据我记忆,这取决于数据库引擎。

前段时间,PDO将返回一个tf字符串在Postgres的布尔字段,我依稀记得,这是返回一个truefalse布尔我最后一次用它。

您可以检查getColumnMeta()后恢复正常结果为原生类型:

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

这样做都附带一弦数,虽然。在PHP手册中的警告是一个。从发动机返回到下一个不一致的值是另一个:

List of PHP native_type's for PDO getColumnMeta()