mysql fetch связывает массив mysql fetch

Ниже приведены два метода, которые обычно используются в большинстве php-кодов для получения данных mysql.

  1. mysql_fetch_array()
  2. mysql_fetch_assoc()

Теперь у меня большая база данных. Для получения данных в циклах ( while ), что быстрее и лучше?

Я нашел этот ориентир .

Каков ваш выбор?

Это зависит от того, как настроены ваши таблицы:

mysql_fetch_array() существу возвращает два массива с числовым индексом, один с ассоциативным строковым индексом.

Таким образом, используя mysql_fetch_array() без указания MYSQL_ASSOC или MYSQL_NUM , или указав MYSQL_BOTH , вернет два массива (в основном, что mysql_fetch_assoc() и mysql_fetch_row() вернутся), так что mysql_fetch_assoc() выполняется быстрее.

Если у вас есть правильная настройка таблицы и правильно написанный запрос, то mysql_fetch_assoc() – это путь, читаемость кода wise $result['username'] легче понять, чем $result[0] .

Я предпочитаю fetch_assoc. Он возвращает «ассоциативный массив» (например, словарь python). Это означает, что ваш массив индексируется строкой (в моем обычном случае).

Значение по умолчанию для fetch_array дает как нумерованные индексы, так и ассоциативные индексы.

Но я никогда не использую нумерованные индексы, поэтому мне нравится немного быстрее, чем fetch_assoc

В тестовом примере, показанном в вашем примере, используется mysql_fetch_array () без каких-либо аргументов для указания MYSQL_ASSOC или MYSQL_NUM, поэтому он по умолчанию имеет значение MYSQL_BOTH … это скорее исказит результат, так как ему потребуется загрузить в два раза больше элементов массива, чем mysql_fetch_assoc (). Поэтому я бы предположил, что это не правильный тест.

На самом деле должно быть очень мало различий между mysql_fetch_array () с MYSQL_ASSOC и mysql_fetch_assoc (), и это не будет самым большим накладным расходами в вашем скрипте.

«Размер» результатов запроса не имеет значения в этом случае.

mysql_fetch_array() обычно создает накладные расходы, возвращая ассоциативный массив плюс индексированные результаты.

Нужно выбрать тип запроса и желаемые результаты о том, следует ли использовать mysql_fetch_array() или mysql_fetch_assoc() .

Если накладные расходы «не учитываются», и я уверен, что запрос завершается успешно, и я знаю, что есть только один результат, который я иногда делаю:

 $q = mysql_query('SELECT `column1`,`column2` FROM `table` WHERE `id` = 123'); list($column1,$column2) = mysql_fetch_array($q); mysql_free_result($q); 

Для итеративного разбирательства (например while цикла while) это просто не сокращает его. Когда нет необходимости в «быстро извлекаемых» результатах (через оператор list ), и результат должен быть дополнительно обработан в коде, я всегда использую mysql_fetch_assoc() *.


* При принуждении фактически использовать устаревшие процедурные функции поиска данных PHP. Есть альтернативы .

Это результат mysql_fetch_array ()

 $row['fieldname'] = 'some value'; 

или

 $row[0] = some value'; 

Это результат mysql_fetch_assoc () будет возвращаться только

 $row['fieldname'] = 'some value'; 

mysql_fetch_assoc() , вероятно, будет лучшим выбором. Существует небольшое повышение производительности (расширение mysql должно искать имена столбцов, но это должно происходить только один раз, независимо от того, сколько строк у вас есть), но, вероятно, недостаточно, чтобы оправдать использование mysql_fetch_array() . mysql_fetch_array() может быть полезна, если вы только выбираете один столбец.

Я полагаю, это зависит от вашего определения большого. Из этого теста вы можете видеть, что только до того, как вы произведете более 1 000 000 000 выборок, вы на самом деле получаете измеримую разницу? Является ли ваша база данных такой большой? Если нет, то перейдите к тому, что вам легче использовать (что, вероятно, для получения ассоциативного массива).

Еще один момент, чтобы рассмотреть, если он настолько велик, что есть измеримая разница, тогда я получаю возможность использовать такие функции вместе. Рассмотрите возможность использования MySQLi или даже лучше использовать PDO!

Хорошо http://php.net/manual/en/function.mysql-fetch-assoc.php состояния

Примечание. Производительность

Важно отметить, что использование mysql_fetch_assoc () не значительно медленнее, чем использование mysql_fetch_row (), в то время как оно обеспечивает значительную добавленную стоимость.

Поэтому разница не должна беспокоиться.

Дополнительным моментом, который следует учитывать, является то, что fetch_assoc() не может возвращать каждый столбец, который вы ожидаете. Если 2 столбца вывода будут иметь одинаковое имя, только последний экземпляр этого столбца будет извлечен fetch_assoc() . Например, следующий запрос:

 SELECT * FROM orders LEFT JOIN line_items ON orders.id = line_items.order_id 

Предполагая, что обе таблицы имеют столбец с именем id , результирующий ассоциативный массив будет иметь ключ с именем id , значение которого задано как line_items.id и вы не сможете получить orders.id из результата!

Вы можете обойти эту проблему с повторяющимися именами столбцов и продолжать использовать fetch_assoc() , вручную fetch_assoc() столбцы SELECT , fetch_assoc() каждому столбцу уникальный псевдоним:

 SELECT o.id AS order_id, #unique alias i.id AS line_item_id, #unique alias o.date, i.qty, i.price FROM orders o LEFT JOIN line_items i ON i.order_id = o.id 

Или вы можете переключиться на использование fetch_array() , что позволит вам получить доступ к id по индексу, а не по ключу

mysql_fetch_array () vs mysql_fetch_assoc ()

mysql_fetch_array (): возвращает массив, соответствующий выбранной строке, и перемещает указатель внутренних данных вперед. для лучшей документации нажмите здесь! чтобы узнать больше mysql_fetch_assoc (): эквивалентно вызову mysql_fetch_array () с MYSQL_ASSOC для необязательного второго параметра. Он возвращает только ассоциативный массив.