amsterdy
@amsterdy
developer of life

MySQLi: как сохранить типы данных в результирующем наборе (массиве)?

Доброго времени суток.

Простой запрос на выборку возвращает массив с данными, где каждый элемент массива является строкой. Код:

$r = $mysqli->query ("SELECT `id`, `name` FROM `users`");
$r->fetch_all (MYSQLI_ASSOC);

// вернет подобный результат
array (
'id' => '10',
'name' => 'Василий'
);


Можно ли получить результирующий набор с сохранением типов данных (int, string)? Если да, какую связку функций mysqli использовать? Если нет, вопрос больше познавательный: почему mysql так себя ведет?

Кстати, результаты подготавливаемого запроса возвращаются «как мне надо», то бишь тип данных сохраняется:
$r = $mysqli->prepare ("SELECT `id`, `name` FROM `users` WHERE `id` > ?");
$uid = 5;
$r->bind_param ('i', $uid);
$r->execute ();
$r->get_result ();

// вернет подобный результат
array (
'id' => 10,
'name' => 'Василий'
);


Решение: установка соответствующей опции.

$db = new mysqli ('localhost', 'root', '', 'mytests');
$db->options (MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
  • Вопрос задан
  • 435 просмотров
Решения вопроса 1
DevMan
@DevMan
sql
CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `amount` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `users` (`id`, `name`, `amount`)
VALUES
	(1,'user1',11.589),
	(2,'user2',478.541),
	(3,'user3',0.258);
php
$db = new mysqli('localhost', 'root', '', 'mytests');
$db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
$query = 'SELECT * FROM users';
$result = $db->query($query);
while($row = $result->fetch_assoc()) {
	var_dump($row);
};

array(3) {
  'id' =>
  int(1)
  'name' =>
  string(5) "user1"
  'amount' =>
  double(11.589)
}
array(3) {
  'id' =>
  int(2)
  'name' =>
  string(5) "user2"
  'amount' =>
  double(478.541)
}
array(3) {
  'id' =>
  int(3)
  'name' =>
  string(5) "user3"
  'amount' =>
  double(0.258)
}


но, откровенно говоря, я не понимаю что заставляет людей цепляться за mysql/mysqli когда есть pdo.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы