mysqli_result::fetch_array
mysqli_fetch_array
(PHP 5, PHP 7)
mysqli_result::fetch_array -- mysqli_fetch_array — Выбирает одну строку из результирующего набора и помещает ее в ассоциативный массив, обычный массив или в оба
Описание
Объектно-ориентированный стиль
Процедурный стиль
Возвращает массив соответствующий выбранной строке или NULL
, если в
результирующей таблице, представленной параметром result
,
больше нет доступных строк.
mysqli_fetch_array() является расширенной версией функции mysqli_fetch_row(). В добавок к сохранению данных в обычном массиве, mysqli_fetch_array() может сохранять строки в ассоциативном массиве, где имена полей результирующей таблицы будут ключами элементов.
Замечание: Имена полей, возвращаемые этой функцией являются регистро-зависимыми.
Замечание: Эта функция устанавливает NULL-поля в значение
NULL
PHP.
Если два столбца или более имеют одинаковые имена, данные последнего столбца будут перезаписывать данные предыдущих. В таких ситуациях для доступа к данным всех столбцов с одинаковыми именами лучше пользоваться обычными массивами, индексированными номерами столбцов.
Список параметров
-
result
-
Только для процедурного стиля: Идентификатор результата запроса, полученный с помощью mysqli_query(), mysqli_store_result() или mysqli_use_result().
-
resulttype
-
Этот необязательный параметр принимает значение константы, которая указывает на тип массива, в который требуется поместить данные. Возможные значения параметра:
MYSQLI_ASSOC
,MYSQLI_NUM
илиMYSQLI_BOTH
.При использовании константы
MYSQLI_ASSOC
функция будет вести себя идентично mysqli_fetch_assoc(), а приMYSQLI_NUM
идентично функции mysqli_fetch_row(). При заданииMYSQLI_BOTH
функция создаст один массив, включающий атрибуты обоих вариантов.
Возвращаемые значения
Возвращает массив строк соответствующих выбранной строке набора или NULL
,
если в результирующей таблице больше нет данных.
Примеры
Пример #1 Объектно-ориентированный стиль
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* проверка подключения */
if ($mysqli->connect_errno) {
printf("Не удалось подключиться: %s\n", $mysqli->connect_error);
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = $mysqli->query($query);
/* обычный массив */
$row = $result->fetch_array(MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);
/* ассоциативный массив */
$row = $result->fetch_array(MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
/* ассоциативный и обычный массивы */
$row = $result->fetch_array(MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);
/* очищаем результаты выборки */
$result->free();
/* закрываем подключение */
$mysqli->close();
?>
Пример #2 Процедурный стиль
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* проверка подключения */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = mysqli_query($link, $query);
/* обычный массив */
$row = mysqli_fetch_array($result, MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);
/* ассоциативный массив */
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
/* ассоциативный и обычный массивы */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);
/* очищаем результаты выборки */
mysqli_free_result($result);
/* закрываем подключение */
mysqli_close($link);
?>
Результат выполнения данных примеров:
Kabul (AFG) Qandahar (AFG) Herat (AFG)
Смотрите также
- mysqli_fetch_assoc() - Извлекает результирующий ряд в виде ассоциативного массива
- mysqli_fetch_row() - Получение строки результирующей таблицы в виде массива
- mysqli_fetch_object() - Возвращает текущую строку результирующего набора в виде объекта
- mysqli_query() - Выполняет запрос к базе данных
- mysqli_data_seek() - Перемещает указатель результата на выбранную строку
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- MySQL Drivers and Plugins
- Улучшенный модуль MySQL
- Функция mysqli_result::$current_field() - Получает смещение указателя по отношению к текущему полю
- Функция mysqli_result::data_seek() - Перемещает указатель результата на выбранную строку
- mysqli_result::fetch_all
- mysqli_result::fetch_array
- Функция mysqli_result::fetch_assoc() - Извлекает результирующий ряд в виде ассоциативного массива
- Функция mysqli_result::fetch_field_direct() - Получение метаданных конкретного поля
- Функция mysqli_result::fetch_field() - Возвращает следующее поле результирующего набора
- Функция mysqli_result::fetch_fields() - Возвращает массив объектов, представляющих поля результирующего набора
- Функция mysqli_result::fetch_object() - Возвращает текущую строку результирующего набора в виде объекта
- Функция mysqli_result::fetch_row() - Получение строки результирующей таблицы в виде массива
- Функция mysqli_result::$field_count() - Получение количества полей в результирующем наборе
- Функция mysqli_result::field_seek() - Установить указатель поля на определенное смещение
- Функция mysqli_result::free() - Освобождает память занятую результатами запроса
- Функция mysqli_result::$lengths() - Возвращает длины полей текущей строки результирующего набора
- Функция mysqli_result::$num_rows() - Получает число рядов в результирующей выборке
Коментарии
Putting multiple rows into an array:
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = $mysqli->query($query);
while($row = $result->fetch_array())
{
$rows[] = $row;
}
foreach($rows as $row)
{
echo $row['CountryCode'];
}
/* free result set */
$result->close();
/* close connection */
$mysqli->close();
?>
Here is a function to return an associative array with multiple columns as keys to the array.
This is a rough approximation of the perl DBI->fetchall_hashref function - something I find myself using quite a bit.
Given a simple mySQL table:
mysql> select * from city;
+----------------+----------------+------------------+------------+
| country | region | city | hemisphere |
+----------------+----------------+------------------+------------+
| South Africa | KwaZulu-Natal | Durban | South |
| South Africa | Gauteng | Johannesburg | South |
| South Africa | Gauteng | Tshwane | South |
| South Africa | KwaZulu-Natal | Pietermaritzburg | South |
| United Kingdom | Greater London | City of London | North |
| United Kingdom | Greater London | Wimbledon | North |
| United Kingdom | Lancashire | Liverpool | North |
| United Kingdom | Lancashire | Manchester | North |
+----------------+----------------+------------------+------------+
*Note* - this is a simple function that makes no attempt to keep multiple values per key, so you need to specify all the unique keys you require.
<?php
$link = mysqli_connect("localhost", "username", "password", "test");
$result = mysqli_query($link, "select * from city");
$results_arr = fetch_all_assoc($result,array('hemisphere','country','region','city'));
function fetch_all_assoc(& $result,$index_keys) {
// Args : $result = mysqli result variable (passed as reference to allow a free() at the end
// $indexkeys = array of columns to index on
// Returns : associative array indexed by the keys array
$assoc = array(); // The array we're going to be returning
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$pointer = & $assoc; // Start the pointer off at the base of the array
for ($i=0; $i<count($index_keys); $i++) {
$key_name = $index_keys[$i];
if (!isset($row[$key_name])) {
print "Error: Key $key_name is not present in the results output.\n";
return(false);
}
$key_val= isset($row[$key_name]) ? $row[$key_name] : "";
if (!isset($pointer[$key_val])) {
$pointer[$key_val] = ""; // Start a new node
$pointer = & $pointer[$key_val]; // Move the pointer on to the new node
}
else {
$pointer = & $pointer[$key_val]; // Already exists, move the pointer on to the new node
}
} // for $i
// At this point, $pointer should be at the furthest point on the tree of keys
// Now we can go through all the columns and place their values on the tree
// For ease of use, include the index keys and their values at this point too
foreach ($row as $key => $val) {
$pointer[$key] = $val;
}
} // $row
/* free result set */
$result->close();
return($assoc);
}
?>
Note that the array returned contains only strings.
E.g. when a MySQL field is an INT you may expect the field to be returned as an integer, however all fields are simply returned as strings.
What this means: use double-equals not triple equals when comparing numbers.
<?php
print $array_from_mysqli_fetch_array['id'] == 1 ? "true" : "false"; // true
print $array_from_mysqli_fetch_array['id'] === 1 ? "true" : "false"; // false
?>
Please note that under PHP 5.x there appears to be a globally defined variable MYSQL_ASSOC, MYSQL_NUM, or MYSQL_BOTH which is the equivalent of MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH!!! Yet under PHP 7.x this is NOT the case and will cause a failure in trying to retrieve the result set!
This can cause severe headaches when trying to find out why you are getting the error:
- mysqli_result::fetch_array() expects parameter 1 to be integer, string given in 'Filename' on line 'XX'