Intereting Posts
Создать изображение предварительного просмотра из видеофайла? Перенаправить исходные файлы .gif на страницу обработчика через .htacces синтаксическая ошибка, неожиданный T_VARIABLE Как мы можем открыть ссылку в режиме частного просмотра Как проверить, успешно ли почта mail () отправила почту Как обновить поле, чтобы добавить значение к существующему значению? Php Изменение размера изображения увеличивает размер изображения Каков наилучший способ передать переменную PHP в Javascript? Первичный ключ UUID MySQL – генерируется PHP или MySQL? Как разместить изображение в Twitter с помощью PHP? что является самым надежным методом для получения файла с удаленного сервера в php Что такое стандартная / лучшая практика для создания модульных тестов для функциональности с использованием баз данных? Set config item (csrf) не работает в Codeigniter Как добавить URL-адреса посещенных страниц в массив сеансов? Отказался от выполнения сценария из-за проблемы с типом MIME (Javascript, Google Chrome)

mysql_query сохранить тип данных, созданный в таблице при возврате?

У меня есть таблица в mysql:

CREATE TABLE user (id INT, name VARCHAR(250)); 

Я запрашиваю таблицу:

 $result = mysql_query("SELECT id,name FROM user"); 

Я собираю результаты:

 while($row = mysql_fetch_assoc($result) $rv[] = $row; 

И я возвращаю данные:

 echo json_encode($rv); 

Проблема в том, что id возвращается как строка, а не int, даже до json_encode. Если i force $ row ['id'] = (int) $ row ['id']; – он отлично работает.

Как заставить mysql возвращать правильный тип данных в строке $?

10x.

Related of "mysql_query сохранить тип данных, созданный в таблице при возврате?"

PDO-> bindColumn может это

 $stmt = $dbh->prepare($sql); $stmt->bindColumn('int_col', $intVar, PDO::PARAM_INT); $stmt->bindColumn('string_col', $strVar, PDO::PARAM_STR); $stmt->execute(); $stmt->fetch(PDO::FETCH_BOUND); 

$ intVar будет автоматически преобразован в int

К сожалению, с PHP <= 5.2 функции / классы MySQL (т.е. mysql_* , mysqli_* и PDO ) основаны на libmysql – библиотеке C, которая обеспечивает поддержку связи с сервером MySQL.

Функции, использующие эту библиотеку, всегда возвращают строки, даже для столбцов integer и float, и вы ничего не можете с этим поделать: единственным решением является наличие некоторого «слоя сопоставления» (такого как ORM), который «знает», на PHP side, который должен содержать каждый столбец, и будет делать преобразование каждый раз, когда некоторые данные извлекаются из базы данных.

Примечание. То, как вы вставляете данные, ничего не меняет о том, что вы получите строки при извлечении данных из БД.

С PHP> = 5.3 функции, которые обмениваются данными с сервером MySQL, могут использовать mysqlnd (MySQL Native Driver) вместо libmysql – это должно быть настроено во время компиляции.

И возможность общения с «родными» типами данных при определенных обстоятельствах является одной из приятных вещей, которые предоставляет mysqlnd; о том, что в этой статье должно быть несколько интересной информации: PHP: новый сетевой трафик, экономия памяти и памяти с помощью mysqlnd .

Чтобы сделать вещи короткими:

  • С PHP 5.2 вы получите только строки из базы данных; и вам нужно будет сделать какое-то преобразование типа самостоятельно
  • С PHP 5.3 вы можете получить собственные типы данных – по крайней мере, в некоторых случаях.