Для записей, PDO предоставляет функцию, которая будет изменять это, PDO::ATTR_STRINGIFY_FETCHES
:
Преобразование числовых значений строк при выборке. Требуется bool
.
Основанием для установки является то, что двигатели базы данных могут обрабатывать очень большие числа (Oracle, например, допускает 38-значное число), а PHP не может. Получение этих чисел в виде строк - это метод, обеспечивающий безопасность и предотвращение потери данных.
Unluckily, 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
Тому, кто читает этот ответ в будущем: 1) Нет, он не ошибся в вопросе. 2) Да, это фактически изменяет тип данных возвращаемых значений. –
@Haocheng Внимательно прочитайте это предложение, это двойное отрицательное;) –