mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_object - PullRequest
16 голосов
/ 08 октября 2009

Все функции очень похожи:

mysql_fetch_array(), mysql_fetch_assoc(), mysql_fetch_object()

Я недавно начал использовать mysql_fetch_object, так как я делаю больше ООП с PHP.

Но каково мнение людей о том, какой из них лучше всего использовать и почему, и, возможно, в каком сценарии их лучше всего использовать.

Спасибо за ваши мысли!

Ответы [ 4 ]

15 голосов
/ 08 октября 2009

mysql_fetch_array даст вам массив, который может иметь в качестве ключей:

  • и номера и имена столбцов, если используется MYSQL_BOTH
  • имен столбцов, используя MYSQL_ASSOC - в этом случае вы получите то же самое, что и при использовании mysql_fetch_assoc
  • только цифры (в зависимости от порядка столбцов в запросе), если используется MYSQL_NUM

Получение результатов, проиндексированных по именам столбцов, является, вероятно, наиболее полезным решением - по крайней мере, проще в использовании.

Но получение результатов, проиндексированных по позициям полей в предложении select, интересно в одной ситуации: когда у вас есть несколько столбцов с одинаковым именем или псевдонимом.
В этом случае, поскольку у вас не может быть двух записей с одинаковым индексом в массиве, вы сможете получить доступ только к одному из этих столбцов, используя имя столбца в качестве индекса.
Для других столбцов с таким же именем вам придется использовать числовые индексы.

Эта ситуация, вероятно, является единственным случаем, для которого я бы использовал mysql_fetch_array - и я бы предпочел использовать псевдонимы в своем запросе, чтобы избежать этой ситуации - на мой взгляд, это более понятно.


mysql_fetch_assoc получит массив с именами столбцов в качестве ключей и данными в качестве значений.

Не так много, чтобы сказать, на самом деле.


И mysql_fetch_object вернет вам объекты.


Выбор между mysql_fetch_assoc и mysql_fetch_object, скорее всего, зависит от того, как вы разрабатываете свое приложение: если вы используете объекты повсюду, второй, вероятно, является наиболее подходящим.

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

1 голос
/ 16 декабря 2010

mysql_fetch_array () извлекает результирующую строку в виде ассоциативного массива, числового массива или обоих. Он возвращает массив строк, который соответствует выбранной строке, или FALSE, если строк больше нет. Тип возвращаемого массива зависит от того, как определен тип $ result_type.

Используя MYSQL_NUM, вы получаете только числовые индексы (как $ row [0], $ row 1 и т. Д.), Т. Е. Числовой массив.

Используя MYSQL_ASSOC, вы получаете только ассоциативные индексы (как $ row ["id"], $ row ["name"] и т. Д.), То есть ассоциативный массив.

Используя MYSQL_BOTH (по умолчанию), вы получите массив с ассоциативными и числовыми индексами. (как $ row [0], $ row ["name"] и т. д.), т.е. как числовой массив, так и ассоциативный массив.

mysql_fetch_assoc () извлекает строку результата в виде ассоциативного массива. (имена столбцов в качестве ключа).

mysql_fetch_object () извлекает результирующую строку как объект.

Возвращает объект со свойствами, соответствующими выбранной строке, и перемещает внутренний указатель данных вперед.

Для меня есть преимущества использования mysql_fetch_assoc () в том, что вы можете использовать функции массива, такие как array_walk и uasort ().

0 голосов
/ 17 октября 2018

Предположим, у нас есть следующая таблица

Name      CountryCode
-----     ----------
Bangladesh  BD
Pueblo     USA
Arvada     USA

$ query = "SELECT Name, CountryCode FROM City";

$ result = mysqli_query ($ connection, $ query)

  1. mysqli_fetch_object (данные могут быть получены как объект)

     while ($obj = mysqli_fetch_object($result)) {
        printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
     }
    
  2. mysqli_fetch_assoc (получить в виде ассоциативного массива, т.е. ключа)

    while ($row = mysqli_fetch_assoc($result)) { printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]); }

  3. mysqli_fetch_array (числовой и ассоциативный оба)

    while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) { printf("%s (%s)\n", $row[0], $row[1]); }

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { printf("%s (%s)\n", $row["Name"], $row["CountryCode"]); }

0 голосов
/ 04 января 2018

Краткое описание:

mysql_fetch_assoc () : Это дает вам ассоциативный массив данных.

mysql_fetch_array () : возвращает комбинированный массив ассоциативных элементов, а также данные с числовым индексом.

mysql_fetch_object () : возвращает объект со свойствами, соответствующими выбранной строке.

Источник

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