使用MySQL时,PDO始终将字段值作为字符串返回。使用MSSQL等其他数据库时PDO是否一致?PDO + MySQL总是返回字符串,但MsSQL呢?
如果没有,是否有一个标志强制PDO总是返回字符串(为了一致性)?还是更好地为所有值返回本机类型?
从我所知道的,Drupal可以使用不同的数据库使用PDO。它执行必要的转换以使SQL语句与各种语法兼容。但是它如何处理查询结果中的数据类型呢?
使用MySQL时,PDO始终将字段值作为字符串返回。使用MSSQL等其他数据库时PDO是否一致?PDO + MySQL总是返回字符串,但MsSQL呢?
如果没有,是否有一个标志强制PDO总是返回字符串(为了一致性)?还是更好地为所有值返回本机类型?
从我所知道的,Drupal可以使用不同的数据库使用PDO。它执行必要的转换以使SQL语句与各种语法兼容。但是它如何处理查询结果中的数据类型呢?
如果你想确保你总是让你可以使用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可以这样使用。 – 2011-05-18 20:47:39
据我记忆,这取决于数据库引擎。
前段时间,PDO将返回一个t
或f
字符串在Postgres的布尔字段,我依稀记得,这是返回一个true
或false
布尔我最后一次用它。
您可以检查getColumnMeta()后恢复正常结果为原生类型:
http://us3.php.net/manual/en/pdostatement.getcolumnmeta.php
这样做都附带一弦数,虽然。在PHP手册中的警告是一个。从发动机返回到下一个不一致的值是另一个:
这可能是有用的: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