Подписаться на обновления блога?

Да

Нет

  • Способы создания сайта

    1. Какими способами разрабатываются сайты
    2. Как можно сравнить самописные сайты с основанными на CMS
    3. Быстродействие
    4. Безопасность
    5. Функциональность
    6. Простота создания
    7. Как выбрать способ создания сайта

    Здравствуйте уважаемый посетитель!

    Существуют разные способы создания сайтов от простейших, основанных на использовании готовых конструкторов до самописных вариантов, которые делаются под конкретные задачи с непосредственным использованием языков веб-программирования. И естественно, каждый способ имеет свои особенности, которые определяют как недостатки, так и преимущества в сравнении между собой.

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

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

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

  • Инструкция по загрузке исходных файлов сайта на локальный веб-сервер

    1. Подготовка локального веб-сервера
    2. Скачивание и распаковка исходных материалов
    3. Перенос файлов на локальный веб-сервер
    4. Импорт таблиц MySQL в базу данных текущего хоста

    Здравствуйте уважаемый посетитель!

    Как ранее отмечалось, в представленных материалах Сборника в случае, если в ходе рассмотрения статей в программный код сайта или базу данных MySQL вносятся какие-либо изменения, то к ним прилагается последний вариант исходных материалов, включающий все файлы сайта в каталоге "www" и таблицы базы данных MySQL.

    И таким образом имея возможность загружать их на свой локальный веб-сервер можно проверять работу сайта на определенных этапах его создания. Что довольно удобно для проверки и понимания тех действий, которые рассматриваются в данном цикле статей.

    Однако, несмотря на то, что исходные файлы сформированы таким образом, что выполнение импорта на локальный веб-сервер не должно вызывать затруднений, все же некоторые пользователи иногда сталкиваются с определенными сложностями. В основном это касается вопросов места расположения файлов на веб-сервере и загрузки базы данных MySQL.

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

    Данная инструкция приведена для примера использования локального веб-сервера Denwer. В случае же работы с другими сборками локального сервера, все операции по загрузке будут применимы и к этим вариантам. За исключением только той части, которая относится к установке сервера Denwer.

    Несмотря на то, что Инструкция предназначена для загрузки файлов сайта и таблиц MySQL на локальный веб-сервер, в отношении импорта данных MySQL ее можно использовать и для хостинга. С той лишь только разницей, что в этом случае должна использоваться база данных, расположенная не на локальном веб-серверен, на а хостинге.

    Что же касается загрузки на хостинг файлов сайта, то по этому вопросу имеется отдельная статья Переносим сайт на хостинг, где показано, как это можно сделать с использованием FTP клиента FileZilla.

Самописный сайт своими руками!

Текущее состояние создаваемого сайта

Здесь можно посмотреть текущее состояние тестового самописного сайта, который создается в рамках цикла статей Сделай сайт с нуля своими руками.

Описание которого сопровождается исходными файлами с таблицами MySQL, предоставляемые бесплатно в дополнительных материалах.

Вы здесь: Главная → Сборник статей → MySQL → Выводим данные из БД MySQL в PHP


Автор: / Дата:

Выводим данные из БД 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-запросе применять значения, которые будет указаны при ее вызове. Такое использование переменных в параметрах функции сделает ее универсальной для поиска записей в любой таблице. В данном случае с условием, что поиск записи в таблицах будет выполняться всего лишь по одному значению одного поля.

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

Кроме того, при создании функции возьмем за основу код, который был составлен для записи данных MySQL в статье Записываем данные MySQL с использованием PHP (рис.9).

Но, теперь будем применять запрос не для ввода, а для вывода данных. К этому добавим также вызов метода "fetch_assoc()" модуля MySQLi PHP для преобразования полученной строки в ассоциативный массив. Для того, чтобы ключами для доступа к значеням его элементов являлись наименования полей таблицы.

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

  1. <?php

  2. //----Функция вывода одиночной записи-------------

  3. function getLine($table, $column, $value) {

  4. global $mysqli;

  5. if (!$result = $mysqli->query("SELECT * FROM `$table` WHERE `$column`='$value'")) {

  6. die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);

  7. }

  8. return $result->fetch_assoc();

  9. }

  10. ?>

Рис.1 Функция вывода одиночной строки

Если сравнить этот код с предыдущей функцией, то можно увидеть некоторые изменения и дополнения, которые заключаются в следующем:

  • заменено название функции и ее параметры (поз.3) - теперь она обозначается "getLine", а в качестве параметров используются значения переменных "$table", "$column" и "$value";
  • в методе выполнения запроса к базе данных "query" модуля MySQLi PHP (поз.5) теперь применен SQL-запрос на вывод данных с условием, что значение переменной поля "$column" выбранной строки должно соответствовать значению "$value";
  • заменен текст сообщения (поз.6), который выводиться на экран браузера в случае возникновении ошибки при выполнении запроса;

В итоге, с помощью вызова объектом "$result" метода "fetch_assoc()" (поз.8) будет возвращена найденная запись в виде ассоциативного массива.

А теперь содержимое этого массива с помощью PHP-кода перенесем на HTML-страницу. И сделаем это, разместив в начале главной страницы в файле "index.php" следующий PHP-код:

  1. <?php

  2. echo "Проверка вывода одиночной строки:";

  3. $table = "url";

  4. $column = "url";

  5. $value = "poluchity-skidku";

  6. $data_bd = getLine($table, $column, $value);

  7. $id = $data_bd["id"];

  8. $title = $data_bd["title"];

  9. $file = $data_bd["file"];

  10. $url = $data_bd["url"];

  11. echo nl2br("\n".$id."/".$title."/".$file."/".$url);

  12. ?>

Рис.2 PHP-код для переноса одиночной строки на страницу сайта

Здесь, в начале переменным "$table", "$column" и "$value", которые будут использоваться в качестве параметров функции, присваиваются нужные значения (поз. 3÷5).

Затем осуществляется вызов функции "getLine()" (поз.6), а после ее выполнения происходит перенос значений элементов массива в соответствующие переменные PHP (поз. 7÷10).

И таким образом, с помощью языковой конструкции "echo" и функции обработки строк "nl2br" (поз.11) мы сможем отобразить полученный результат на одной из страниц нашего сайта. Функции "nl2br" здесь применена для вставки тега "‹br›", для перевода строк, имеющих регулярные выражения "\n".

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

Для увеличения / уменьшения размера изображения кликните по картинке
ВВыводим данные из БД MySQL в PHP, картинка 1

Рис.3 Скриншот вывода одиночной строки

Как видно, здесь через дробь по порядку отображаются значения полей выбранной записи, где полю "id" соответствует значение 4, "title" - "Получить скидку", а "file" - "righting.php". Что и требовалось получить для этого варианта.

Вывод набора строк по заданному условию (использование двумерного массива)


В предыдущем примере мы рассмотрели случай, когда требуется извлечь только одну уникальную запись. Но, что делать, если при выполнении запроса к базе данных "query" в полученном объекте "$result" будет не одна, а множество строк?

В этом случае при выполнении метода "fetch_assoc()" следует использовать указатель текущей позиции, который при каждой следующей операции считывания сдвигается на одну позицию вперед. Если же строки закончатся, то указатель на несуществующей строке возвратит значение "false".

А для перебора всех найденных записей при выполнении метода "fetch_assoc()" обычно используется оператор цикла "while", который обеспечивает выполнение вложенного выражения до тех пор, пока выражение в самом "while" является "TRUE" (в нашем случае, пока не закончатся извлекаемые строки).

Ниже показан PHP-код с внесенными дополнениями, который позволяет функции работать уже не с одной, а с набором строк (позиции с дополнениями или изменениями по сравнению с предыдущим вариантом выделены светлым фоном).

  1. <?php

  2. //----Функция вывода набора строк по заданному условию-------------

  3. function getUrlDesс($url_1, $url_2, $url_3) {

  4. global $mysqli;

  5. if (!$result = $mysqli->query("SELECT * FROM `url` WHERE `url`='$url_1' OR `url`='$url_2' OR `url`='$url_3' ORDER BY `id` DESC")) {

  6. die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);

  7. }

  8. $array = array();

  9. while (($row = $result->fetch_assoc()) != false) {

  10. $array[] = $row;

  11. }

  12. return $array;

  13. }

  14. ?>

Рис.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-страницу.

  1. <?php

  2. echo nl2br("\n\nПроверка вывода набора строк по заданному условию:");

  3. $url_1 = "poluchity-skidku";

  4. $url_2 = "statistika-ugonov";

  5. $url_3 = "kontakti";

  6. $data_bd = getUrlDesс($url_1, $url_2, $url_3);

  7. for ($i = 0; $i < count($data_bd); $i++) {

  8. $id = $data_bd[$i]["id"];

  9. $title = $data_bd[$i]["title"];

  10. $file = $data_bd[$i]["file"];

  11. $url = $data_bd[$i]["url"];

  12. echo nl2br("\n".$id."/".$title."/".$file."/".$url);

  13. }

  14. ?>

Рис.5 PHP-код для переноса набора строк на страницу сайта

В отличие от первого варианта, здесь для перебора всех элементов массива используется оператор цикла "for" (поз. 7÷13), в теле которого вывод каждой строки будет выполняться по значению переменной "$i" и наименованию полей.

Обновив главную страницу получим результат, изображенный на следующем скриншоте.

Для увеличения / уменьшения размера изображения кликните по картинке
ВВыводим данные из БД MySQL в PHP, картинка 2

Рис.6 Скриншот вывода набора строк по заданному условию

Здесь видно, что теперь выведены данные трех срок, которые удовлетворяют заданному условию, причем, размещены они, как и требуется, в порядке убывания по значению поля "id".

При этом, можно сравнить этот результат с тем, который мы получили по аналогичному SQL-запросу в предыдущей статье, и убедиться в том, что они полностью совпадают.

Проверка наличия записи в таблице


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

В этом варианте не требуется получать какие-либо данные. Нужно лишь иметь ответ - Да или Нет. На практике, в качестве такого ответа функция возвращает значение "TRUE" при положительном результате и "FALSE" - при отрицательном.

Сделать это можно довольно простым способом, задействовав оператор условия "if". Код такой функции с наименованием "checkLine" показан на следующем рисунке (позиции с внесенными изменениями по сравнению с вариантом, изображенном на рис.1, выделены светлым цветом).

  1. <?php

  2. //----Функция проверки наличия записи-------------

  3. function checkLine($table, $column, $value) {

  4. global $mysqli;

  5. if (!$result = $mysqli->query("SELECT * FROM `$table` WHERE `$column`='$value'")) {

  6. die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);

  7. }

  8. if ($result->fetch_assoc()) return true;

  9. else

  10. return false;

  11. }

  12. ?>

Рис.7 Функция проверки наличия записи

Здесь оператором "if" (поз.8,10) определено, что если будет найдена по заданному условию хотя бы одна строка, функция возвратит значение "TRUE", если же таких срок не будет, то "FALSE". Остальной же код аналогичен, за исключением только названия самой функции.

Для проверки этого варианта составим следующий небольшой скрипт.

  1. <?php

  2. echo nl2br("\n\nПроверка наличия записи:");

  3. $table = "url";

  4. $column = "url";

  5. $value = "poluchity-skidku";

  6. $data_bd = checkLine($table, $column, $value);

  7. if ($data_bd == true) echo nl2br("\nЗапись со значением \"poluchity-skidku\" в таблице \"url\" существует");

  8. else

  9. echo nl2br("\nЗапись по заданному условию не найдена");

  10. ?>

Рис.8 PHP-код для проверки наличия записи

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

Для увеличения / уменьшения размера изображения кликните по картинке
ВВыводим данные из БД MySQL в PHP, картинка 3

Рис.9 Скриншот проверки наличия записи

Теперь для проверки работы этого варианта внесем в значение переменной "$value", по которой происходит поиск нужной строки, какую-нибудь ошибку, например добавим цифру 7, как показано на рис.10.

  1. <?php

  2. echo nl2br("\n\nПроверка наличия записи:");

  3. $table = "url";

  4. $column = "url";

  5. $value = "poluchity-skidku7";

  6. $data_bd = checkLine($table, $column, $value);

  7. if ($data_bd == true) echo nl2br("\nЗапись со значением \"poluchity-skidku\" в таблице \"url\" существует");

  8. else

  9. echo nl2br("\nЗапись по заданному условию не найдена");

  10. ?>

Рис.10 PHP-код с ошибкой в значении переменной "$url"

И убедимся, что в этом случае будет получен отрицательный результат поиска такой записи.

Для увеличения / уменьшения размера изображения кликните по картинке
ВВыводим данные из БД MySQL в PHP, картинка 4

Рис.11 Скриншот проверки наличия записи с внесенной ошибкой

На этом мы закончим рассмотрение вопроса о выводе данных MySQL с помощью PHP. И теперь, на основе рассмотренного здесь материала перейдем в следующих статьях к практическому использованию возможностей MySQL.

Исходные файлы сайта


Знак папкиИсходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:

  • Файлы каталога www
  • Таблицы базы данных MySQL

При этом фрагменты PHP-кодов, которые в качестве примера выполняют вывод данных из таблицы "url_php", размещены в файлах "functions.php" папки "mysql" и "index.php корневого каталога сайта.

Для отключения проверки работы представленных скриптов следует соответствующие фрагменты PHP-кода закомментировать.

В части, касающейся базы данных, временно созданные таблицы "url_sql" и "url_php", которые ранее использовались для демонстрации способов работы с БД MySQL, в связи с дальнейшей ненадобностью удалены. По состоянию на текущее время в базе данных находится только таблица "url".

Исходные файлы бесплатно предоставляются только зарегистрированным пользователям.

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

С уважением, Николай Гришин


Комментарии


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

Буду Вам за это очень признателен!

comments powered by HyperComments