Как выводить информацию из базы данных на сайт
Перейти к содержимому

Как выводить информацию из базы данных на сайт

  • автор:

Как выводить информацию из базы данных на сайт

Для получения данных в MySQL применяется команда SELECT . Например, получение всех данных из таблицы Users:

SELECT * FROM Users

Рассмотрим получение данных на примере таблицы Users, созданной в прошлых, которая имеет следующее определение:

CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Объектно-ориентированный стиль

При выполнении команды SELECT метод query() объекта mysqli возвращает набор полученных строк, который мы можем перебрать с помощью цикла. Например, перебор с помощью цикла foreach :

$sql = "SELECT * FROM Users"; if($result = $conn->query($sql)) < foreach($result as $row)< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

Здесь $result представляет набор строк. Каждый его элемент, который передается в переменную $row , хранит данные отдельной строки в виде ассоциативного массива, где ключи элементов — названия столбцов.

Вместо цикла foreach также можно использовать другие виды циклов. Например, применение цикла while :

$sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< while($row = $result->fetch_array()) < $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

В данном случае метод $result->fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false , и произойдет выход из цикда. Полученное значени $row опять же представляет строку в виде ассоциативного массива.

После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью метода free() :

$result->free();

Теперь посмотрим на примере. Определим скрипт index.php , которая будет выводить значения из таблицы Users:

   METANIT.COM  

Список пользователей

connect_error)< die("Ошибка: " . $conn->connect_error); > $sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< $rowsCount = $result->num_rows; // количество полученных строк echo "

Получено объектов: $rowsCount

"; echo ""; foreach($result as $row)< echo ""; echo ""; echo ""; echo ""; echo ""; > echo "
IdИмяВозраст
" . $row["id"] . "" . $row["name"] . "" . $row["age"] . "
"; $result->free(); > else< echo "Ошибка: " . $conn->error; > $conn->close(); ?>

Таким образом, при обращении к скрипту index.php браузер отобразит список данных, полученных из БД:

Получение данных из MySQL в PHP с помощью MySQLi

Дополнительно стоит отметить, что с помощью свойства $result->num_rows мы можем получить количество строк, извлеченных из БД.

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

При процедурном стиле функция mysqli_query() при успешном выполнении команды SELECT возвращает набор строк, который можно перебрать с помощью цикла:

$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)) < foreach($result as $row)< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

Как и при объектно-ориентированном подходе, полученные строки представляют ассоциативные массивы, где ключи элементов — названия столбцов.

Пример перебоа с помощью цикла while :

$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)) < while($row = mysqli_fetch_array($result))< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

Функция mysqli_fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false , и произойдет выход из цикла.

После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью функции mysqli_free_result() , в которую передается полученный набор строк:

mysqli_free_result($result);
   METANIT.COM  

Список пользователей

$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql))< $rowsCount = mysqli_num_rows($result); // количество полученных строк echo "

Получено объектов: $rowsCount

"; echo ""; foreach($result as $row)< echo ""; echo ""; echo ""; echo ""; echo ""; > echo "
IdИмяВозраст
" . $row["id"] . "" . $row["name"] . "" . $row["age"] . "
"; mysqli_free_result($result); > else < echo "Ошибка: " . mysqli_error($conn); >mysqli_close($conn); ?>

Вывод данных из MySql на PHP

Счетчик PR-CY.Rank

Первое, что нам следует сделать для того, чтобы получить данные из таблицы базы данных, — установить соединение с БД.

Извлечь данные из таблицы MySql

После того, как мы установили соединение с БД, c помощью запроса можно получить данные из любой таблицы. А с помощью цикла while их вывести.

: рублей
"; > ?>

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

mysqli_connect

mysqli_connect(, , , ) — устанавливает соединение с базой данных.

mysqli_query

mysqli_query(, ) — выполняет запрос к БД, написанный на языке SQL.

mysqli_fetch_array

mysqli_fetch_array() — поочередно возвращает по одной строке из результата запроса.

Вывод переменной врутри строки

Заметьте, что если вы выводите строку оператором echo и строка заключена в двойные кавычки (именно двойные), то внутрь строки можно вставлять переменные в фигурных скобках и они будут подставленны в этот шаблон. Круто, да?

Понравилась или помогла статья? Самое лучшее, что ты можешь сделать — это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься — это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!

Урок 21: Выборка из БД и вывод на экран

Правила безопасного кода достаточно простые — это применять нужные функции в нужном месте. При этом нет смысла впадать в безумие и применять их даже когда не надо. Допустим если мы пишем: $x = 1; echo $x; , то тут подразумевается, что $x всегда будет равна 1, а значит ничего применять не надо. А вот данные, которые пришли из-вне, или в содержании которых Вы не уверены, тогда стоит действовать по следующим правилам. Данные могут прийти из сессии, из кук, из формы POST или адресной строки GET, или же вы пользуетесь сторонней библиотекой, которая должна вернуть определённые данные, всем им не стоит доверять! Правила защиты очень просты:
Для чисел мы применяем: (int), (float), вне зависимости добавляем ли мы эти числа в БД (База Данных MySQL), или выводим на экран. При добавлении в MySQL числа пишем без кавычек.
Для строк в MySQL: мы пишем в кавычках, а так же применяем mysqli_real_escape_string.
Для строк, которые выводим на экран: htmlspecialchars.

$res = mysqli_query($link," SELECT * FROM `users` WHERE `login` = '".mysqli_real_escape_string($link,$_POST['login'])."' AND `age` = ".(int)$_POST['age']." "); $row = mysqli_fetch_assoc($res); echo (int)$row['age']; echo htmlspecialchars($row['login']);

Лично я проверяю безопасность следующим образом — ввожу во все поля строчку:

`'"text

Если mysqli_real_escape_string забыли применить, то выходит ошибка MYSQL. Не забывайте проверить то, что я пишу, чтобы имели представление о чём я говорю. Если при выводе информации на экран выводится текст жирным, то значит Вы забыли прописать htmlspecialchars, если же вы его прописали, то на экран выведутся кавычки, знак меньше, b, знак больше, text, знак меньше, слэш, b, знак больше. 🙂
Ошибка в MySQL называется SQL-Inj (SQL-Injection), ошибка в HTML называют XSS-Inj (XSS-Injection).

теперь давайте разберёмся как работает fetch_assoc. Он выбирает следующую запись. Допустим у нас в таблице есть 10 пользователей и мы пишем следующий код:

$res = mysqli_query($link," SELECT * FROM `users` "); while($row = mysqli_fetch_assoc($res)) < // закончили на 11-ой записи echo $row['login']; >while($row = mysqli_fetch_assoc($res)) < // Не сработает, 12-ой не существует echo $row['id']; >

В цикле мы вызываем функцию, пока она возвращает TRUE (любое содержание). Когда курсор среди выбранных записей передвигается на 11-ую позицию, то функция как бы отвечает «всё, записи закончились» и возвращает NULL, null как и false обрывает цикл, записей больше нет. Запуская второй цикл курсор до сих пор остаётся на 11-ой позиции и при вызове функции fetch_assoc у нас функция пытается выбрать следующую запись, а именно 12-ую, которой не существует, поэтому снова возвращает NULL и цикл не проходит ни одной итерации. Иду на опережение, в качестве академических знаний рассказываю, вернуть курсор на нулевую позицию можно при помощи функции mysqli_data_seek, в реальной же практике эта функция очень редко применяется и на протяжении этого курса она не нужна!

Если в форму ввести длинный текст без пробелом, то при выводе в DIV у нас появится горизонтальная прокрутка (не забудьте проверить, горизонтальная — это слева направо), так же текст уезжает за границу сайта вправо, исправляется это при помощи CSS свойства для DIV:

word-wrap:break-words;

Мы не верстаем таблицами, но в качестве академических знаний скажу, что break-words не работает для TD, если для таблицы не применять свойство table-layout:fixed;

Есть ещё функция nl2br, которую необходимо применять для textarea, когда человек вводит текст с переносами на новую строчку. При простом выводе его текста: echo $row[‘text’] переносы не будут работать, текст будет в одну строку выводиться, именно тут и надо применить nl2br функцию.

Под каждым уроком есть 10 тестов, которые помогут Вам закрепить пройденный материал.
Один из тестов будет развивать Вашу логику и интеллект!
Чтобы получить доступ к тестам — авторизируйтесь!

Работа с MySQL в PHP

PHP поддерживает работу с базой данных MySQL. Специальные встроенные функции для работы с MySQL позволяют просто и эффективно работать с этой СУБД: выполнять любые запросы, читать и записывать данные, обрабатывать ошибки.

Сценарий, который подключается к БД, выполняет запрос и показывает результат, будет состоять всего из нескольких строк. Для работы с MySQL не надо ничего дополнительно устанавливать и настраивать; всё необходимое уже доступно вместе со стандартной поставкой PHP.

Что такое mysqli?

mysqli (MySQL Improved) — это расширение PHP, которое добавляет в язык полную поддержку баз данных MySQL. Это расширение поддерживает множество возможностей современных версий MySQL.

Как выглядит работа с базой данных

Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:

  1. Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.
  2. Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так далее.
  3. Сформировать правильный SQL запрос (например, на чтение данных из таблицы).
  4. Убедиться, что запрос был выполнен успешно.
  5. Получить результат от СУБД в виде массива из записей.
  6. Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).

Функция mysqli connect: соединение с MySQL

Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером СУБД. В PHP это делается с помощью стандартной функции mysqli_connect() . Функция возвращает результат — ресурс соединения. Данный ресурс используется для всех следующих операций с MySQL.

Но чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра:

  • Адрес сервера СУБД;
  • Логин;
  • Пароль.

Если вы следовали стандартной процедуре установки MySQL или используете OpenServer, то адресом сервера будет localhost , логином — root . При использовании OpenServer пароль для подключения — это пустая строка ‘’ , а при самостоятельной установке MySQL пароль вы задавали в одном из шагов мастера установки.

Базовый синтаксис функции mysqli_connect() :

mysqli_connect(, , , ); 

Проверка соединения

Первое, что нужно сделать после соединения с СУБД — это выполнить проверку, что оно было успешным. Эта проверка нужна, чтобы исключить ошибку при подключении к БД. Неверные параметры подключения, неправильная настройка или высокая нагрузка заставит MySQL отвергать новые подключения. Все эти ситуации приведут к невозможности соединения, поэтому программист должен проверить успешность подключения к серверу, прежде чем выполнять следующие действия.

Соединение с MySQL устанавливается один раз в сценарии, а затем используется при всех запросах к БД.

Результатом выполнения функции mysqli_connect() будет значение специального типа — ресурс. Если подключение к MySQL не удалось, то функция mysqli_connect() вместо ресурса вернёт логическое значение типа «ложь» — false . Хорошей практикой будет всегда проверять результат выполнения этой функции и сравнивать его с ложью.

Соединение с MySQL и проверка на ошибки:

 else < print("Соединение установлено успешно"); >?> 

Функция mysqli_connect_error() просто возвращает текстовое описание последней ошибки MySQL.

Установка кодировки

Первым делом после установки соединения крайне желательно явно задать кодировку, которая будет использоваться при обмене данными с MySQL. Если этого не сделать, то вместо записей со значениями, написанными кириллицей, можно получить последовательность из знаков вопроса: . . Вызовите эту функцию сразу после успешной установки соединения: mysqli_set_charset($con, «utf8»);

Выполнение запросов

Установив соединение и определив кодировку мы готовы выполнить свои первые SQL-запросы. Вы уже умеете составлять корректные SQL команды и выполнять их через консольный или визуальный интерфейс MySQL-клиента. Те же самые запросы можно отправлять без изменений и из PHP-сценария. Помогут в этом несколько встроенных функций языка.

Два вида запросов

Следует разделять все SQL-запросы на две группы:

  1. Чтение информации (SELECT).
  2. Модификация (UPDATE, INSERT, DELETE).

При выполнении запросов из среды PHP, запросы из второй группы возвращают только результат их исполнения: успех или ошибку.

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

Добавление записи

Вернёмся к нашему проекту — дневнику наблюдений за погодой. Начнём практическую работу с заполнения таблиц данными. Для начала добавим хотя бы один город в таблицу cities .

Выражение INSERT INTO используется для добавления новых записей в таблицу базы данных.

Составим корректный SQL-запрос на вставку записи с именем города, а затем выполним его путём передачи этого запроса в функцию mysqli_query() , чтобы добавить новые данные в таблицу.

Обратите внимание, что первым параметром для функции mysqli_query() передаётся ресурс подключения, полученный от функции mysqli_connect() , вторым параметром следует строка с SQL-запросом.

При запросах на изменение данных (не SELECT) результатом выполнения будет логическое значение — true или false , которое будет означать, что запрос выполнить не удалось. Для получения строки с описанием ошибки существует функция mysqli_error($link) .

Функция insert id: как получить идентификатор добавленной записи

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

Здесь пригодится функция mysqli_insert_id() . Она принимает единственный аргумент — ресурс соединения, а возвращает идентификатор последней добавленной записи.

Теперь у нас есть всё необходимое, чтобы добавить погодную запись. Вот как будет выглядеть комплексный пример с подключением к MySQL и добавлением двух новых записей:

 else < $sql = 'INSERT INTO cities SET name = "Санкт-Петербург"'; $result = mysqli_query($link, $sql); if ($result == false) < print("Произошла ошибка при выполнении запроса"); >else < $city_id = mysqli_insert_id($link); $sql = 'INSERT INTO weather_log SET city_id = ' . $city_id . ', day = "2017-09-03", temperature = 10, cloud = 1'; $result = mysqli_query($link, $sql); if ($result == false) < print("Произошла ошибка при выполнении запроса"); >> > 

Чтение записей

Другая частая операция при работе с базами данных в PHP — это получение записей из таблиц (запросы типа SELECT). Составим SQL-запрос, который будет использовать SELECT выражение. Затем выполним этот запрос с помощью функции mysqli_query() , чтобы получить данные из таблицы.

В этом примере показано, как вывести все существующие города из таблицы cities :

В примере выше результат выполнения функции mysqli_query() сохранён в переменной $result . В этой переменной находятся не данные из таблицы, а специальный тип данных — так называемая ссылка на результаты запроса.

Чтобы получить действительные данные, то есть записи из таблицы, следует использовать другую функцию — mysqli_fetch_array() — и передать ей единственным параметром эту самую ссылку. Теперь каждый вызов функции mysqli_fetch_array() будет возвращать следующую запись из всего результирующего набора записей в виде ассоциативного массива.

Цикл while здесь используется для «прохода» по всем записям из полученного набора записей. Значение поля каждой записи можно узнать просто обратившись по ключу этого ассоциативного массива.

Как получить сразу все записи в виде двумерного массива

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

Функция mysqli_fetch_all($res, MYSQLI_ASSOC) вернёт двумерный массив со всеми записями из результата последнего запроса. Перепишем пример с показом существующих городов с её использованием:

Как узнать количество записей

Часто бывает необходимо узнать, сколько всего записей вернёт выполненный SQL-запрос. Это может помочь при организации постраничной навигации или просто в качестве информации. Узнать число записей поможет функция mysqli_num_rows() , которой следует передать ссылку на результат запроса.

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *