Выводим данные из БД MySQL в PHP
Здравствуйте, уважаемый посетитель!
В предыдущей статье мы рассмотрели возможность вывода записей MySQL с помощью SQL-запросов. При этом, результаты отображались на странице веб-приложения phpMyAdmin.
Такой способ получения данных полезен для просмотра содержимого БД MySQL, но явно недостаточен для того, чтобы можно было их использовать для работы сайта. В этом случае, вместо приложения phpMyAdmin, требуются другие инструменты.
В сайтостроении для этих целей обычно используют язык программирования PHP, где с помощью модуля MySQLi данные можно извлекать непосредственно в PHP. А, далее с ними работать как с обычными переменными.
Следует отметить, что наиболее часто встречающиеся PHP-функции, предназначенные для вывода данных из таблиц MySQL, по виду возвращаемого результата можно разделить на три варианта:
- когда результатом выполнения SQL-запроса может быть лишь только одна строка;
- в случае, если результатом выборки может быть множество строк.
- при выполнении запроса на проверку наличия записи в таблице по заданному условию.
В первом случае PHP-функцией возвращается одномерный ассоциативный массив, ключами которого будут являться наименования полей таблицы.
В варианте со множеством строк на выходе получается двумерный массив, в котором первый ключ определяет порядковый номер строки из набора, а второй - наименования полей.
В случае поверки наличия записи в таблице, функция возвращает значение переменной типа "bool", где "TRUE" - запись существует, "FALSE" - отсутствует.
При этом, на основе приведенных здесь вариантов PHP-кода можно получать различные функции под конкретные задачи, меняя для этого лишь текст SQL-запроса и соответствующие параметры.
Следует отметить, что для того, чтобы в создаваемых функциях более наглядно была показана связка языков PHP и SQL, во всех рассматриваемых здесь вариантах будут сознательно использованы те же самые SQL-запросы, которые применялись в предыдущей статье Выводим данные из БД MySQL с помощью SQL-запросов.
Таким образом, мы рассмотрим наиболее часто используемые варианты PHP-функций, предназначенных для вывода данных MySQL, и с помощью соответствующих PHP-скриптов перенесем полученные результаты на на экран браузера.
Содержание
- Вывод одиночной строки (использование одномерного массива)
- Вывод набора строк по заданному условию (использование двумерного массива)
- Проверка наличия записи в таблице
- Исходные файлы сайта
Вывод одиночной строки (использование одномерного массива)
С начала создадим функцию, с помощью которой в PHP получим нужную строку, а затем выведем ее на HTML-страницу.
Для этого, как было ранее сказано, будем использовать тот же самый SQL-запрос, который рассматривался в предыдущей статье, а именно: "SELECT * FROM `url` WHERE `url`='poluchity-skidku'". Только вместо конкретного наименования таблицы "url", одноименного имени поля "url" и его значения "poluchity-skidku" укажем переменные PHP, скажем, "$table", "$column" и "$value", соответственно.
Данные переменные будут являться параметрами создаваемой функции, что позволит в SQL-запросе применять значения, которые будет указаны при ее вызове. Такое использование переменных в параметрах функции сделает ее универсальной для поиска записей в любой таблице. В данном случае с условием, что поиск записи в таблицах будет выполняться всего лишь по одному значению одного поля.
Аналогичные универсальные функции можно составить и для других вариантов условий, что исключит необходимость каждый раз составлять новые скрипты под конкретные задачи.
Кроме того, при создании функции возьмем за основу код, который был составлен для записи данных в предыдущей статье (рис.9).
Но, теперь будем применять запрос не для ввода, а для вывода данных. К этому добавим также вызов метода "fetch_assoc()" модуля MySQLi PHP для преобразования полученной строки в ассоциативный массив. Для того, чтобы ключами для доступа к значеням его элементов являлись наименования полей таблицы.
После соответствующих преобразований PHP-код функции, в которой будет извлекаться из таблицы первая найденная строка (в нашем случае она единственная), примет следующий вид.
-
-
//----Функция вывода одиночной записи-------------
-
function getLine($table, $column, $value) {
-
global $mysqli;
-
if (!$result = $mysqli->query("SELECT * FROM `$table` WHERE `$column`='$value'")) {
-
die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
return $result->fetch_assoc();
-
}
-
?>
Рис.1 Функция вывода одиночной строки
Если сравнить этот код с предыдущей функцией, то можно увидеть некоторые изменения и дополнения, которые заключаются в следующем:
- заменено название функции и ее параметры (поз.3) - теперь она обозначается "getLine", а в качестве параметров используются значения переменных "$table", "$column" и "$value";
- в методе выполнения запроса к базе данных "query" модуля MySQLi PHP (поз.5) теперь применен SQL-запрос на вывод данных с условием, что значение переменной поля "$column" выбранной строки должно соответствовать значению "$value";
- заменен текст сообщения (поз.6), который выводиться на экран браузера в случае возникновении ошибки при выполнении запроса;
В итоге, с помощью вызова объектом "$result" метода "fetch_assoc()" (поз.8) будет возвращена найденная запись в виде ассоциативного массива.
А теперь содержимое этого массива с помощью PHP-кода перенесем на HTML-страницу. И сделаем это, разместив в начале главной страницы в файле "index.php" следующий PHP-код:
-
-
echo "Проверка вывода одиночной строки:";
-
$table = "url";
-
$column = "url";
-
$value = "poluchity-skidku";
-
$data_bd = getLine($table, $column, $value);
-
$id = $data_bd["id"];
-
$title = $data_bd["title"];
-
$file = $data_bd["file"];
-
$url = $data_bd["url"];
-
echo nl2br("\n".$id."/".$title."/".$file."/".$url);
-
?>
Рис.2 PHP-код для переноса одиночной строки на страницу сайта
Здесь, в начале переменным "$table", "$column" и "$value", которые будут использоваться в качестве параметров функции, присваиваются нужные значения (поз. 3÷5).
Затем осуществляется вызов функции "getLine()" (поз.6), а после ее выполнения происходит перенос значений элементов массива в соответствующие переменные PHP (поз. 7÷10).
И таким образом, с помощью языковой конструкции "echo" и функции обработки строк "nl2br" (поз.11) мы сможем отобразить полученный результат на одной из страниц нашего сайта. Функции "nl2br" здесь применена для вставки тега "‹br›", для перевода строк, имеющих регулярные выражения "\n".
Если после всех выполненных действий обновить главную страницу, то мы должны увидеть на ней результат вывода одиночной строки в соответствии с заданным условием, как показано на скриншоте.

Рис.3 Скриншот вывода одиночной строки
Как видно, здесь через дробь по порядку отображаются значения полей выбранной записи, где полю "id" соответствует значение 4, "title" - "Получить скидку", а "file" - "righting.php". Что и требовалось получить для этого варианта.
Вывод набора строк по заданному условию (использование двумерного массива)
В предыдущем примере мы рассмотрели случай, когда требуется извлечь только одну уникальную запись. Но, что делать, если при выполнении запроса к базе данных "query" в полученном объекте "$result" будет не одна, а множество строк?
В этом случае при выполнении метода "fetch_assoc()" следует использовать указатель текущей позиции, который при каждой следующей операции считывания сдвигается на одну позицию вперед. Если же строки закончатся, то указатель на несуществующей строке возвратит значение "false".
А для перебора всех найденных записей при выполнении метода "fetch_assoc()" обычно используется оператор цикла "while", который обеспечивает выполнение вложенного выражения до тех пор, пока выражение в самом "while" является "TRUE" (в нашем случае, пока не закончатся извлекаемые строки).
Ниже показан PHP-код с внесенными дополнениями, который позволяет функции работать уже не с одной, а с набором строк (позиции с дополнениями или изменениями по сравнению с предыдущим вариантом выделены светлым фоном).
-
-
//----Функция вывода набора строк по заданному условию-------------
-
function getUrlDesс($url_1, $url_2, $url_3) {
-
global $mysqli;
-
if (!$result = $mysqli->query("SELECT * FROM `url` WHERE `url`='$url_1' OR `url`='$url_2' OR `url`='$url_3' ORDER BY `id` DESC")) {
-
die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
$array = array();
-
while (($row = $result->fetch_assoc()) != false) {
-
$array[] = $row;
-
}
-
return $array;
-
}
-
?>
Рис.4 Функция вывода набора строк по заданному условию
Здесь следует обратить внимание на объявление в качестве массива новой переменной "$array" (поз.8), в котором будут размещаться все найденные записи.
А, далее, в цикле "while" (поз. 9÷11) при каждом обращении к методу "fetch_assoc()" через промежуточную переменную "$row" в этот массив будет записываться данные очередной строки. Причем, одним из ключей массива будет порядковый номер строки (по умолчанию начиная от нуля), а второй - названия полей таблицы.
Таким образом мы получим двумерный массив со всеми записями, которые удовлетворяют условию, указанному в запросе (поз.5). В данном случае SQL-запрос полностью повторяет тот, который использовался в предыдущей статье, а именно: "SELECT * FROM `url` WHERE `url`='poluchity-skidku' OR `url`='statistika-ugonov' OR `url`='kontakti' ORDER BY `id` DESC". Исключение составляет лишь то, что вместо конкретных значений полей в нем указаны переменные "$url_1", "$url_2" и "$url_3".
В итоге, после выполнения такой функции будет возвращен двумерный массив (поз.12), в котором будут находиться все полученные данные по заданному условию.
А, теперь, составив небольшой PHP-скрипт, изображенный на рис.5, перенесем содержимое этого массива на HTML-страницу.
-
-
echo nl2br("\n\nПроверка вывода набора строк по заданному условию:");
-
$url_1 = "poluchity-skidku";
-
$url_2 = "statistika-ugonov";
-
$url_3 = "kontakti";
-
$data_bd = getUrlDesс($url_1, $url_2, $url_3);
-
for ($i = 0; $i < count($data_bd); $i++) {
-
$id = $data_bd[$i]["id"];
-
$title = $data_bd[$i]["title"];
-
$file = $data_bd[$i]["file"];
-
$url = $data_bd[$i]["url"];
-
echo nl2br("\n".$id."/".$title."/".$file."/".$url);
-
}
-
?>
Рис.5 PHP-код для переноса набора строк на страницу сайта
В отличие от первого варианта, здесь для перебора всех элементов массива используется оператор цикла "for" (поз. 7÷13), в теле которого вывод каждой строки будет выполняться по значению переменной "$i" и наименованию полей.
Обновив главную страницу получим результат, изображенный на следующем скриншоте.

Рис.6 Скриншот вывода набора строк по заданному условию
Здесь видно, что теперь выведены данные трех срок, которые удовлетворяют заданному условию, причем, размещены они, как и требуется, в порядке убывания по значению поля "id".
При этом, можно сравнить этот результат с тем, который мы получили по аналогичному SQL-запросу в предыдущей статье, и убедиться в том, что они полностью совпадают.
Проверка наличия записи в таблице
Нередко в процессе выполнения различных программ требуется делать проверку наличие записей в таблицах MySQL для того, чтобы в случае положительного результата выполнять определенные действия с их содержимым.
В этом варианте не требуется получать какие-либо данные. Нужно лишь иметь ответ - Да или Нет. На практике, в качестве такого ответа функция возвращает значение "TRUE" при положительном результате и "FALSE" - при отрицательном.
Сделать это можно довольно простым способом, задействовав оператор условия "if". Код такой функции с наименованием "checkLine" показан на следующем рисунке (позиции с внесенными изменениями по сравнению с вариантом, изображенном на рис.1, выделены светлым цветом).
-
-
//----Функция проверки наличия записи-------------
-
function checkLine($table, $column, $value) {
-
global $mysqli;
-
if (!$result = $mysqli->query("SELECT * FROM `$table` WHERE `$column`='$value'")) {
-
die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
if ($result->fetch_assoc()) return true;
-
else
-
return false;
-
}
-
?>
Рис.7 Функция проверки наличия записи
Здесь оператором "if" (поз.8,10) определено, что если будет найдена по заданному условию хотя бы одна строка, функция возвратит значение "TRUE", если же таких срок не будет, то "FALSE". Остальной же код аналогичен, за исключением только названия самой функции.
Для проверки этого варианта составим следующий небольшой скрипт.
-
-
echo nl2br("\n\nПроверка наличия записи:");
-
$table = "url";
-
$column = "url";
-
$value = "poluchity-skidku";
-
$data_bd = checkLine($table, $column, $value);
-
if ($data_bd == true) echo nl2br("\nЗапись со значением \"poluchity-skidku\" в таблице \"url\" существует");
-
else
-
echo nl2br("\nЗапись по заданному условию не найдена");
-
?>
Рис.8 PHP-код для проверки наличия записи
После обновления страницы можно увидеть, что по данному запросу в заданной таблице запись существует.

Рис.9 Скриншот проверки наличия записи
Теперь для проверки работы этого варианта внесем в значение переменной "$value", по которой происходит поиск нужной строки, какую-нибудь ошибку, например добавим цифру 7, как показано на рис.10.
-
-
echo nl2br("\n\nПроверка наличия записи:");
-
$table = "url";
-
$column = "url";
-
$value = "poluchity-skidku7";
-
$data_bd = checkLine($table, $column, $value);
-
if ($data_bd == true) echo nl2br("\nЗапись со значением \"poluchity-skidku\" в таблице \"url\" существует");
-
else
-
echo nl2br("\nЗапись по заданному условию не найдена");
-
?>
Рис.10 PHP-код с ошибкой в значении переменной "$url"
И убедимся, что в этом случае будет получен отрицательный результат поиска такой записи.

Рис.11 Скриншот проверки наличия записи с внесенной ошибкой
На этом мы закончим рассмотрение вопроса о выводе данных MySQL с помощью PHP. И теперь, на основе рассмотренного здесь материала перейдем в следующих статьях к практическому использованию возможностей MySQL.
Исходные файлы сайта
Исходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:
- Файлы каталога www
- Таблицы базы данных MySQL
При этом фрагменты PHP-кодов, которые в качестве примера выполняют вывод данных из таблицы "url_php", размещены в файлах "functions.php" папки "mysql" и "index.php корневого каталога сайта.
Для отключения проверки работы представленных скриптов следует соответствующие фрагменты PHP-кода закомментировать.
В части, касающейся базы данных, временно созданные таблицы "url_sql" и "url_php", которые ранее использовались для демонстрации способов работы с БД MySQL, в связи с дальнейшей ненадобностью удалены. По состоянию на текущее время в базе данных находится только таблица "url".
Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.
Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.
Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.
С уважением,