PHP 8.4.3 Released!

mysql_fetch_array

(PHP 4, PHP 5)

mysql_fetch_arrayОбрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба

Внимание

Данный модуль устарел начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API. Альтернативы для этой функции:

Описание

mysql_fetch_array(resource $result, int $result_type = MYSQL_BOTH): array

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

Список параметров

result

Обрабатываемый результат запроса. Этот результат может быть получен с помощью функции mysql_query().

result_type

Тип возвращаемого массива. Является константой и может принимать следующие значения: MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH.

Возвращаемые значения

Возвращает массив строк, соответствующих обработанному ряду результата запроса, или false, если рядов больше нет. Тип возвращаемого массива зависит от значения параметра result_type. При использовании MYSQL_BOTH (по умолчанию), вы получите массив, состоящий как из ассоциативных индексов, так и из численных. MYSQL_ASSOC вернёт только ассоциативные индексы (аналогично функции mysql_fetch_assoc()), а MYSQL_NUM - только численные (аналогично функции mysql_fetch_row()).

Если несколько колонок в результате будут иметь одинаковые названия, то будет возвращена последняя колонка. Чтобы получить доступ к другим колонкам с тем же именем, используйте численные индексы массива или псевдонимы в запросе. В случае псевдонимов используйте именно их - вы не сможете использовать настоящие имена колонок.

Примеры

Пример #1 Запрос с применением псевдонимов для дублирующихся имён колонок

SELECT table1.field AS foo, table2.field AS bar FROM table1, table2

Пример #2 mysql_fetch_array() с MYSQL_NUM

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"Ошибка соединения: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_NUM)) {
printf("ID: %s Имя: %s", $row[0], $row[1]);
}

mysql_free_result($result);
?>

Пример #3 mysql_fetch_array() с MYSQL_ASSOC

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"Ошибка соединения: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf("ID: %s Имя: %s", $row["id"], $row["name"]);
}

mysql_free_result($result);
?>

Пример #4 mysql_fetch_array() с MYSQL_BOTH

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"Ошибка соединения: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Имя: %s", $row[0], $row["name"]);
}

mysql_free_result($result);
?>

Примечания

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

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

Замечание: Имена полей, возвращаемые этой функцией являются зависимыми от регистра.

Замечание: Эта функция устанавливает NULL-поля в значение null PHP.

Смотрите также

  • mysql_fetch_row() - Обрабатывает ряд результата запроса и возвращает массив с числовыми индексами
  • mysql_fetch_assoc() - Возвращает ряд результата запроса в качестве ассоциативного массива
  • mysql_data_seek() - Перемещает внутренний указатель в результате запроса
  • mysql_query() - Посылает запрос MySQL

Добавить

Примечания пользователей 2 notes

up
17
robjohnson at black-hole dot com
22 years ago
Benchmark on a table with 38567 rows:

mysql_fetch_array
MYSQL_BOTH: 6.01940000057 secs
MYSQL_NUM: 3.22173595428 secs
MYSQL_ASSOC: 3.92950594425 secs

mysql_fetch_row: 2.35096800327 secs
mysql_fetch_assoc: 2.92349803448 secs

As you can see, it's twice as effecient to fetch either an array or a hash, rather than getting both. it's even faster to use fetch_row rather than passing fetch_array MYSQL_NUM, or fetch_assoc rather than fetch_array MYSQL_ASSOC. Don't fetch BOTH unless you really need them, and most of the time you don't.
up
8
KingIsulgard
16 years ago
I have found a way to put all results from the select query in an array in one line.

// Read records
$result = mysql_query("SELECT * FROM table;") or die(mysql_error());

// Put them in array
for($i = 0; $array[$i] = mysql_fetch_assoc($result); $i++) ;

// Delete last empty one
array_pop($array);

You need to delete the last one because this will always be empty.

By this you can easily read the entire table to an array and preserve the keys of the table columns. Very handy.
To Top