MySQL результат сравнения с использованием php - PullRequest
4 голосов
/ 10 сентября 2009

Какой из них лучше получить данные из базы данных MySQL, используя PHP и почему?

mysql_fetch_row() 
mysql_fetch_assoc() 
mysql_fetch_array()

Ответы [ 4 ]

4 голосов
/ 10 сентября 2009

mysql_fetch_row () Возвращает массив с числовым индексом / ключом. Обычно это быстрее по сравнению с двумя другими методами.

mysql_fetch_assoc () Возвращает массив с именем столбца в качестве ключа. Это немного медленнее, чем mysql_fetch_row ().

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

Я думаю, на самом деле этот метод не имеет существенной разницы.

2 голосов
/ 10 сентября 2009

Это зависит от того, как вы хотите получить доступ к данным строки.

  • Если вы хотите использовать числовые индексы, используйте fetch_row
  • Если вы хотите использовать имя поля в качестве индекса, используйте fetch_assoc

Если вам не нужно использовать индексы (скажем, вы пропускаете строку через foreach) или вам все равно, использование fetch_row должно привести к немного меньшим издержкам (хотя это очень минимально). Если у вас нет предпочтений, предпочтите использовать имена полей, так как это облегчает чтение кода.

Никогда не используйте fetch_array, который по сути объединяет fetch_row и fetch_assoc. Использование как числового, так и ассоциативного почти наверняка сделает код менее понятным. (Вы можете использовать fetch_array, если указали параметр $ result_type как-то отличный от MYSQL_BOTH, но вы также можете использовать соответствующую функцию, поскольку ваш код будет таким же понятным, но более кратким).

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

2 голосов
/ 10 сентября 2009

На самом деле, у каждого из них свой метод возврата данных, поэтому вопрос больше похож на то, «какой из них больше подходит для ваших нужд».

mysql_fetch_row () возвращает массивы вроде этого:

$row[0];

mysql_fetch_assoc () :

$row["table_field"];

mysql_fetch_array () :

$row[0];
// or
$row["table_field"];

Возможно, «самым тяжелым» здесь является fetch_array, поскольку он принимает необязательный параметр, который вы можете указать, хотите ли вы, чтобы ваши данные возвращались как массив ассоциативных или числовых ключей.

Также есть этот:

mysql_fetch_object () :

$row->table_field;

Лично я бы использовал их все в соответствии с моими потребностями в каждом запросе, но если вы работаете с ООП в php, этот последний вариант, возможно, является "niciest".

0 голосов
/ 10 сентября 2009

Ни один из них по своей сути не превосходит другого - они просто разные. Функции _assoc() и _row() на самом деле просто удобные функции для разных способов вызова mysql_fetch_array().

С документация

Возвращает массив строк, которые соответствует извлеченному ряду, или ЛОЖЬ, если строк больше нет. тип возвращаемого массива зависит от того, как тип_результата определен. Используя MYSQL_BOTH (по умолчанию), вы получите массив с ассоциативным и числовым индексы. Используя MYSQL_ASSOC, вы только получить ассоциативные индексы (как mysql_fetch_assoc () работает), используя MYSQL_NUM, вы получаете только числовые индексы (как работает mysql_fetch_row ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...