Получение строки данных в виде массива. Функции 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-скрипты