mysqli_result::fetch_array

mysqli_fetch_array

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_array -- mysqli_fetch_array Выбирает следующую строку из набора результатов и помещает её в ассоциативный массив, обычный массив или в оба

Описание

Объектно-ориентированный стиль

public mysqli_result::fetch_array(int $mode = MYSQLI_BOTH): array|null|false

Процедурный стиль

mysqli_fetch_array(mysqli_result $result, int $mode = MYSQLI_BOTH): array|null|false

Выбирает одну строку данных из набора результатов и возвращает её в виде массива. Каждый последующий вызов этой функции будет возвращать следующую строку в наборе результатов или null, если строк больше нет.

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

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

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

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

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

result

Только для процедурного стиля: объект mysqli_result, который вернула функция mysqli_query(), mysqli_store_result(), mysqli_use_result() или mysqli_stmt_get_result().

mode

Этот необязательный параметр принимает значение константы, которая указывает на тип массива, в который требуется поместить данные. Возможные значения параметра: MYSQLI_ASSOC, MYSQLI_NUM или MYSQLI_BOTH.

При использовании константы MYSQLI_ASSOC функция будет вести себя идентично mysqli_fetch_assoc(), а при MYSQLI_NUM идентично функции mysqli_fetch_row(). При задании MYSQLI_BOTH функция создаст один массив, включающий атрибуты обоих вариантов.

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

Возвращает массив, представляющий выбранную строку, null, если в наборе результатов больше нет строк или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования mysqli_result::fetch_array()

Объектно-ориентированный стиль

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$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"]);

Процедурный стиль

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = mysqli_query($mysqli, $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"]);

Результат выполнения приведённых примеров:

Kabul (AFG)
Qandahar (AFG)
Herat (AFG)

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

  • mysqli_fetch_assoc() - Выбирает следующую строку из набора результатов и помещает её в ассоциативный массив
  • mysqli_fetch_column() - Получает один столбец из следующей строки набора результатов
  • mysqli_fetch_row() - Выбирает следующую строку из набора результатов и помещает её в обычный массив
  • mysqli_fetch_object() - Выбирает следующую строку из набора результатов в виде объекта
  • mysqli_query() - Выполняет запрос к базе данных
  • mysqli_data_seek() - Перемещает указатель результата на выбранную строку

add a note add a note

User Contributed Notes 4 notes

up
82
Jammerx2
14 years ago
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();
?>
up
-2
Duncan
11 years ago
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
?>
up
-18
meaje at msn dot com
7 years ago
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'
up
-53
ahouston at gmail dot com
13 years ago
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);              
}

?>
To Top