Получение строки данных в виде массива. Функции mysqli_fetch_array() (или mysql_fetch_array())


Функция mysqli_fetch_array() (mysql_fetch_array()) используется для получения одной строки из результирующего набора, которую она помещает в массив. При этом можно получить как ассоциативный массив, так и массив с числовыми индексами. Кроме того, можно вернуть сразу оба типа массива, передав соответствующий параметр.

Так как функция mysql_fetch_array() сейчас является устаревшей и имеет статус «depricated», то рекомендуется в коде использовать ее модификацию — mysqli_fetch_array(). При этом разницы в использовании практически нет никакой.

Данную функцию можно использовать в «объектно-ориентированном» или «процедурном» стиле. Рассмотрим сначала «объектно-ориентированный» стиль. Допустим у нас имеется база данных «my_dbbase», в которой есть таблица «users». Из нее нам необходимо достать 10 строк (id пользователя и его имя) и вывести эти данные построчно:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$mysqli = new mysqli("localhost", "root", "123456", "my_dbbase");
// проверяем соединение 
if (mysqli_connect_errno()) {
    printf("Подключиться к БД не удалось: %s\n", mysqli_connect_error());
    exit();
}
//создаем и выполняем запрос к таблице пользователей
$query = "SELECT id, name FROM users ORDER BY id LIMIT 10";
$result = $mysqli->query($query);
//выводим данные
while($row = $result->fetch_array()) {
    echo $row['id']." ".$row['name']."<br>";
}
// очищаем result-объект 
$result->close();
// закрываем соединение 
$mysqli->close();

В данном примере мы использовали константу MYSQLI_ASSOC, чтобы получить данные в виде ассоциативного массива. Ключом при этом будет является название колонки в таблице. Если же нам нужен обычный массив с числовыми ключами, то можно использовать константу MYSQLI_NUM:

1
2
3
while($row = $result->fetch_array(MYSQLI_NUM)) {
    echo $row[0]." ".$row[1]."<br>";
}

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

Существует и второй способ использования функции mysqli_fetch_array — процедурный:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
//получаем ссылку на соединение к БД
$connectLink = mysqli_connect("localhost", "root", "123456", "my_dbbase");
// проверяем соединение 
if (mysqli_connect_errno()) {
    printf("Подключиться к базе не удалось: %s\n", mysqli_connect_error());
    exit();
}
//создаем и выполняем запрос к таблице пользователей
$query = "SELECT id, name FROM users ORDER BY id LIMIT 10";
$result = mysqli_query($connectLink, $query);
//преобразуем данные в ассоциативный массив, выводим их построчно      
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    echo $row['id']." ".$row['name']."<br>";
}
// очищаем result-объект 
mysqli_free_result($result);
// закрываем соединение 
mysqli_close($connectLink);

Каждый раз, когда мы выполняем

1
$row = mysqli_fetch_array($result, MYSQLI_ASSOC)

, то в $row помещается новая строка из выборки, а указатель в результирующей выборке при этом смещается на следующую строку. Таким образом, мы можем пройтись по всем строкам.

Какой способ выбрать — решать вам.

Другие посты

Категория: MySQL, PHP-скрипты

Оставить комментарий