$ mysqli- & gt; fetch_all не работает [дубликат]

Контекст всегда важен, например size и сложность массива. Для небольших и средних списков несколько ответов, размещенных здесь, просто прекрасны, хотя некоторые разъяснения должны быть сделаны:

  • . Для разделения списка с разделителями самый сплиттер на основе SQLCLR является самым быстрым. Существует множество примеров, если вы хотите написать свой собственный или вы можете просто загрузить бесплатную библиотеку SQL # функций CLR (которую я написал, но функция String_Split и многие другие) полностью бесплатны ).
  • Разделение массивов на основе XML может быть быстрым, но вам нужно использовать XML на основе атрибутов, а не на основе элементов XML (который является единственным типом, указанным в ответах здесь, хотя XML-пример @ AaronBertrand является лучшим, поскольку его код использует функцию XML text(). Для получения дополнительной информации (например, анализа производительности) при использовании XML для разбиения списков проверьте «Использование XML для передачи списков в качестве параметров в SQL Server » Phil Factor.
  • Использование TVP отлично (если вы используете хотя бы SQL Server 2008 или новее) по мере того, как данные передаются в proc и отображаются пре- анализируется и строго типизируется как переменная таблицы. В любом случае сохранение всех данных в DataTable означает дублирование данных в памяти, поскольку они копируются из исходной коллекции. Следовательно, используя DataTable меня что передача в ТВП не работает хорошо для больших наборов данных (т. е. не очень хорошо масштабируется).
  • XML, в отличие от простых разделительных списков Ints или Strings, может обрабатывать более чем одномерные массивы, подобно TVP. Но также, как и метод DataTable TVP, XML не масштабируется, так как он более чем удваивает объем данных в памяти, поскольку ему необходимо дополнительно учитывать накладные расходы XML-документа.

При всем том, что, если данные, которые вы используете, являются большими или не очень большими, но постоянно растут, то метод IEnumerable TVP является лучшим выбором, поскольку он передает данные на SQL Server (например, метод DataTable ), НО не требует дублирования коллекции в памяти (в отличие от любого другого метода). В этом ответе я привел пример кода SQL и C #:

Пропустить словарь для хранимой процедуры T-SQL

19
задан Stokres 26 July 2012 в 08:42
поделиться

3 ответа

mysqli_result :: fetch_all () требует MySQL Native Driver (mysqlnd).

вероятность того, что вам может быть не хватать.

посмотреть это сообщения, которые могут вам помочь.

mysqli fetch_all () не действительная функция?

31
ответ дан Community 26 August 2018 в 13:25
поделиться

http://www.php.net/manual/en/mysqli-result.fetch-all.php

Доступно только с mysqlnd.

Заметки о включении mysqlnd: http://www.php.net/manual/en/mysqlnd.install.php

2
ответ дан Timur 26 August 2018 в 13:25
поделиться

fetch_all потребляет больше памяти, чем fetch_array (), и имеет другие побочные эффекты, поэтому fetch_array / fetch_assoc являются предпочтительными.

Подробно из документации PHP:

Доступно только с mysqlnd.

Поскольку mysqli_fetch_all () возвращает все строки в виде массива за один шаг, он может потреблять больше памяти, чем некоторые аналогичные функции, такие как mysqli_fetch_array (), который возвращает только одну строку за раз из набора результатов. Кроме того, если вам нужно выполнить итерацию по набору результатов, вам понадобится конструкция цикла, которая будет еще больше влиять на производительность. По этим причинам mysqli_fetch_all () следует использовать только в тех ситуациях, когда полученный набор результатов будет отправлен на другой уровень для обработки.

Если вы действительно хотите его использовать, вам необходимо установить mySQL с собственным приводом (mysqlnd) Пример установки:

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \

На Ubuntu вы можете просто сделать

sudo apt-get install php5-mysqlnd
4
ответ дан wonton 26 August 2018 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: