Две функции взяты из объекта mysqli_result:
1.- fetch_array(): получить строку в массиве только с одной записью.
В этом случае вы запрашиваете для каждой строки базу данных?
2.- fetch_all(): получает все строки сразу и возвращает массив со всеми ними.
И в этом случае запрос только один раз (к базе данных)?
Я не знаю, как лучше и оптимальнее всего это сделать. Я не знаю, было бы лучше получить ряд по одному или получить их все сразу было бы хуже.
Примеры:
1.-fetch_array():
$resultUsers = getAllUsers($db);
while($row = $resultUsers->fetch_array()){
echo $row['name'];
}
2.- fetch_all():
$resultUsers = getAllUsers($db);
foreach ($resultUsers->fetch_all(MYSQLI_ASSOC) as $value) {
echo $value['name'] . "<br>";
}
2.A.- Что функция getAllUsers() возвращает весь массив с fetch_all() внутри массива, и здесь она проходит через него.
foreach (getAllUser($db) as $value) {
echo $value['name'] . "<br>";
}
Чего я не знаю, так это того, как запрашивается база данных, если в запросе fetch_array() по одному из базы данных и fetch_all() одновременно. Или в обоих случаях запрос выполняется сразу, а изменения заключаются в том, как обрабатывать данные.
Или если есть способ сделать его более оптимальным или подойти к нему по-другому, ставьте, надеюсь на вашу помощь (от того, кто разбирается в теме). Всего наилучшего.
Я нахожу это интересным вопросом. Жаль, что кажется , что ОП забросил его.
Тем не менее, желательно что-то внести в него.
В большинстве ситуаций программирования, связанных с php-mysql, будет необходимо получить данные из базы данных, чтобы сравнить их, отобразить на экране и т. д.
В основном есть 3 метода, которые наиболее часто используются для получения наборов результатов в MySQLi:
mysqli_fetch_assoc()
: Получает ассоциативный массив данных.mysqli_fetch_array()
: возвращает комбинацию ассоциативных элементов, а также данные с числовым индексом.mysqli_fetch_object()
: возвращает объект со свойствами, соответствующими полученной строке.Интересное сравнение на сайте spearheadsoftwares.com (см. изображение) рассматривает все три метода с использованием эталонных тестов, выполненных современным программным обеспечением при различных условиях нагрузки.
В тесте получаются результаты данных 10, 100, 1000, 10000, 100000, 1000000, 10000000 записей, чтобы увидеть, насколько быстрой и эффективной является каждая функция.
Каждый набор данных содержит столбец
int
уникального типа и столбец типаvarchar
. То есть обычный набор данных, вроде тех, которые мы обычно используем в любом типичном запросе.Как говорится, картинка стоит тысячи слов (хотя в этом предложении много лжи... :) ... Оставим это для другого форума.
Это график результата:
Глядя на эти результаты, можно сделать следующие выводы:
Функциональность MySQLi по умолчанию
mysqli_fetch_assoc
работает с большей производительностью, чем два других метода (mysqli_fetch_array
иmysqli_fetch_object
).Производительность
mysqli_fetch_object
оправдана, когда он возвращает объекты вместо собственных массивов, которые всегда обеспечивают лучшее использование памяти, чем любой другой тип выходного массива. И для использования объектно-ориентированного подхода к набору результатов другие две функции не могут удовлетворить.В случае с
mysqli_fetch_array()
, проблема здесь заключается в использовании повседневного программирования, многие программисты php использовалиmysqli_fetch_array()
его как таковой, не вдаваясь в подробности его использования. По умолчаниюmysqli_fetch_array
он возвращает два типа наборов результатов на основе значения по умолчаниюresult_type MYSQLI_BOTH
:Result_type: MYSQLI_NUM
- что дает нам просто массив нумерованных индексов, например:array ([0] => 'apple')
Result_type: MYSQLI_ASSOC
- который представляет собой просто ассоциативный массив, например:array ('fruit' => 'apple')
где'fruit'
будет имя столбца базы данных или используемый псевдоним.Поэтому, когда мы используем , мы
mysqli_fetch_array
получим дублированный набор данных, состоящий как из нумерованных индексов, так и из ассоциативных наборов, что, конечно же, является нашим блокировщиком производительности.Поэтому всякий раз, когда вы используете функцию,
mysqli_fetch_array
всегда указывайтеreturn_type
требуемый массив набора результатов.вывод
Как для производительности, так и потому, что в большинстве случаев нам понадобится ассоциативный массив при интерактивном управлении данными в php, наиболее рекомендуемой функцией будет
mysqli_fetch_assoc()
По сути, запрос выполняется только один раз. Единственная большая разница заключается в том, как они позволяют вам работать с записями. По одному или все сразу.
fetch_array() Работа с одной строкой результатов.
И эй, mysqli_fetch_all() возвращает все строки в массиве за один шаг. Эта функция потребляет больше памяти, чем fetch_array().
Это будет зависеть от вас, потому что, если у вас много результатов или вы ожидаете большое количество результатов, вы можете заблокировать память. Поэтому было бы лучше проходить их один за другим, а не извлекать их все. Так что это будет зависеть от использования вы собираетесь дать его и реализацию, которую вы хотите использовать в соответствии с вашими потребностями