2011-05-16 115 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()