對於記錄,PDO提供了一個功能,它會改變這一點,PDO::ATTR_STRINGIFY_FETCHES
:
取時將數字值的字符串。需要bool
。
該設置的基本原理是數據庫引擎可以處理非常大的數字(例如,Oracle允許38位數字),而PHP不能。將這些數字作爲字符串檢索是一種保持安全並防止數據丟失的方法。
不幸,the MySQL driver does not support it:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$sql = 'SELECT 1 AS integer_number, 3.14 AS floating_point';
$res = $pdo->query($sql);
while($row = $res->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
}
array(2) {
["integer_number"]=>
string(1) "1"
["floating_point"]=>
string(4) "3.14"
}
它工作在大多數情況下,但對於'SELECT SUM不工作(...'此外,正如其名稱所示,預備陳述的好處是否對這個選項無效? – Haocheng 2013-04-21 09:08:18
對於誰在將來讀這個答案:1)不,他沒有誤讀這個問題。 2)是的,它實際上改變了返回值的數據類型。 – 2013-04-21 09:10:50
@Haocheng讀這句話仔細,這是雙重否定;) – 2013-04-21 09:14:08