对于记录,PDO提供了一个可以改变这一点的功能, :PDO::ATTR_STRINGIFY_FETCHES
提取时将数值转换为字符串。需要。bool
该设置背后的基本原理是数据库引擎可以处理非常大的数字(例如,Oracle允许38位数字),而PHP则不能。将这些数字检索为字符串是一种保持安全和防止数据丢失的方法。
不幸的是,MySQL驱动程序不支持它:
<?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"
}