Работа с MySQL в PHP
PHP поддерживает работу с базой данных MySQL. Специальные встроенные функции для работы с MySQL позволяют просто и эффективно работать с этой СУБД: выполнять любые запросы, читать и записывать данные, обрабатывать ошибки.
Сценарий, который подключается к БД, выполняет запрос и показывает результат, будет состоять всего из нескольких строк. Для работы с MySQL не надо ничего дополнительно устанавливать и настраивать; всё необходимое уже доступно вместе со стандартной поставкой PHP.
Что такое mysqli?
mysqli (MySQL Improved) — это расширение PHP, которое добавляет в язык полную поддержку баз данных MySQL. Это расширение поддерживает множество возможностей современных версий MySQL.
Как выглядит работа с базой данных
Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:
- Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.
- Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так далее.
- Сформировать правильный SQL запрос (например, на чтение данных из таблицы).
- Убедиться, что запрос был выполнен успешно.
- Получить результат от СУБД в виде массива из записей.
- Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).
Функция 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-запросы на две группы:
- Чтение информации (SELECT).
- Модификация (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() , которой следует передать ссылку на результат запроса.
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Вывод HTML из БД ASP.NET MVC?
Вопрос в том как вывести HTML из БД на ASP.NET MVC? т.е в БД находится текст с тегами надо сделать так чтобы он на странице отображался не как текст а именно как html. Сейчас вывод осуществляется так @Html.DisplayFor(modelItem => item.Body); нашел что надо использовать @HTML.RAW() но если писать @HTML.RAW(modelItem => item.Body) то вылазит ошибка как решить эту проблему?
HTML генериться с помошью TinyMCE.
- Вопрос задан более трёх лет назад
- 9078 просмотров
Вывод информации из базы данных MySql на веб страницу
В этом уроке мы научимся выводить из базы данных MySql необходимые нам данные. Я покажу Вам как выводить данные в цикле, а также как вывести данные из базы по определенному запросу.
В двух прошлых уроках мы научились создавать базу данный MySql, а также вносить в нее новые записи из формы веб страницы.
В этом уроке будем учиться выводить информацию, хранящуюся в базе данных MySql на веб страницу.
Мы научимся выводить информацию в цикле. Эти знания могут Вам понадобиться если Вы будете выводить из базы список новостей, заметок или чего-либо подобного.
А также научимся извлекать конкретную запись с учетом запроса пользователя.
Вывод информации из базы данных MySql
Что нам нужно сделать?
1. Мы создадим html файл, в котором будет кнопка для вывода всего списка в цикле и форма для запроса конкретного пользователя из списка.
2. Конкретного пользователя мы будем запрашивать по имени и фамилии (можете запрашивать по имени и e-mail адресу, принцип все равно будет один).
3. В зависимости от того на какую кнопку нажал пользователь (полный список или конкретная запись) будет запускаться соответствующий файл обработчик, который мы также создадим.
4. Файл обработчик будет обрабатывать наш запрос и выводить на экран то, что мы от него потребовали.
1. Итак, создадим новый html файл и назовем его search_user.html Для сохранения будем использовать папку с файлами из прошлого урока “db1” (эту папку Вы можете найти в исходниках к уроку или скачать из исходников прошлого урока. Не забудьте вписывать свои данные в файл connect.php).
Давайте в созданном файле реализуем выбор из двух опций вывода: либо вывести всех пользователей, либо информацию о каком-то конкретном. У нас должно быть две кнопки, каждая будет запускать свой файл обработчик. И еще помимо кнопок нужно два поля, которые будут передавать введенные данные.
Таким образом, код получится следующий:
Добавить пользователяВывод данных
А выглядеть страница будет вот так:
Помимо формы мы поместили в нее ссылку на файл, через который мы можем добавлять пользователей ( см. предыдущий урок). Это для того, чтобы мы могли перемещаться по веб страницам и с легкостью обращаться к любому файлу.
2. Если Вы нажмете на любую из кнопок, то увидите ошибку. Так и должно быть, потому что еще никаких файлов-обработчиков мы не создали, а только прописали их имена в “action”.
Давайте это исправим и создадим первый файл, который будет искать и выводить пользователя по заданным имени и фамилии.
Создадим файл ‘select_user.php’ и разместим его в том же каталоге, что и html файл.
1. В этом файле мы сначала подключим файл “connect.php” (он обеспечит подключение к базе данных MySql).
2. Затем получим значения введенные в поля и поместим их в переменные “$first_name” и “$last_name”.
3. После сформируем запрос для выбора элементов с заданными параметрами из таблицы базы данных MySql.
4. С помощью функции “mysql_query” исполним этот запрос. В качестве результата эта функция возвращает массив, который мы должны разбить на строки. Делает это специальная функция “mysql_fetch_array”. Результат ее работы мы заносим в переменную “$row”.
5. При помощи конструкции “if – else” мы проверяем есть ли запись с введенными параметрами и если есть, то при помощи функции “printf” выводим на экран результат, подставляя в нужное место вывода каждый из параметров записи. Если записи с заданными параметрами нет, то выводим сообщение о том, что в базе данных отсутствуют записи с такими параметрами.
6. В конце страницы вставляем ссылки для перехода обратно в режим поиска, либо для вставки нового элемента в таблицу базы данных MySql.
Вот код всей вышеописанной процедуры:
Selected User Пользователь: " .$row['first_name'] . " " .$row['last_name'] ."Контактные данные
E-mail: " .$row['email'] . "
Facebook: " .$row['facebook'] . "
---------
); > else
");> ?> Вернуться к поиску
Добавить пользователя
Теперь вставьте в таблицу Вашей базы данный несколько записей людей с разными именами и фамилиями и попробуйте скрипт в действии.
Введите сначала существующие параметры – посмотрите результат, потом введите только имя без фамилии (или наоборот), введите несуществующие параметры – протестируйте Ваш скрипт. (Перед тем как начать будьте уверены, что Ваш Денвер запущен).
7. Если Вы поняли принцип того, что мы сделали в файле “select_user.php”, то вывести всех пользователей не составит труда.
Создайте файл “all_users.php” и поместите его в тот же каталог, где лежит файл “search_user.html”.
Отличаем этого файла от предыдущего будет то, что мы не будем передавать никаких параметров из файла “search_user.html”. Мы просто составим запрос к базе данных и попросим вывести все записи из таблицы базы.
А далее вместо конструкции “if – else” мы будем использовать конструкцию “do – while”. Эта конструкция скажет нашей программе выводить записи до тех пор пока они есть в таблице базы. Это и есть вывод данных из базы в цикле.
Итак, пропишите в файле “all_users.php” следующий код:
Selected User Пользователь: " .$row['first_name'] . " " .$row['last_name'] ."Контактные данные
E-mail: " .$row['email'] . "
Facebook: " .$row['facebook'] . "
---------
" ); > while($row = mysql_fetch_array($result)); ?> Вернуться к поиску
Добавить пользователя
Протестируйте кнопку, которая выводит всех пользователей:
Теперь Вы умеете выводить записи из базы данных MySql в цикле и по заданным параметрам. Практическое применение этому Вы найдете практически везде, где речь заходит о php и MySql.
В следующем уроке этой серии я расскажу Вам как можно внести изменения в запись таблицы базы данных, а также удалить запись из веб страницы.
Если Вы еще не подписаны на рассылку, обязательно подпишитесь, чтобы не пропустить все самое интересное.
Также жду Ваших комментариев и пожеланий.
Успехов Вам и до встречи в следующем уроке!
Как текст с БД вывести в html тег img?
Доброго времени суток!
У меня есть БД, где есть текст. Мне надо вписать этот текст в тег , но у меня нихера не получается.
require_once 'mysql_connect.php'; $login = $_COOKIE['login']; $sql = 'SELECT user_image FROM users WHERE login = ?'; $query = $pdo->prepare($sql); $query->execute([$login]); $result = $query->fetch(PDO::FETCH_ASSOC); if($result !== false) < $her = $result["user_image"]; echo ``; > else

Вот сам БД:
- Вопрос задан более трёх лет назад
- 187 просмотров
19 комментариев
Простой 19 комментариев

Дмитрий @Compolomus Куратор тега PHP
Ну там кроме имени файла ещё путь надо указать, например от корня
/images/$her

Илхомжон Матазимов @mr_qpdb Автор вопроса
Дмитрий, $result[«user_image»] возвращает полный путь, вместе с директорией папки

Дмитрий @Compolomus Куратор тега PHP
jabrik, а скрин говорит обратное

Дмитрий @Compolomus Куратор тега PHP
jabrik, нажимаем в арбузере ctrl + u смотрим что там, пробуем нажать ссылку, сделать выводы и исправить

Дмитрий @slo_nik Куратор тега PHP
jabrik, где же полный путь, если в базе только имя директории и изображения?

Илхомжон Матазимов @mr_qpdb Автор вопроса

Дмитрий,
Вот, что выводит $result[«user_image»]

Илхомжон Матазимов @mr_qpdb Автор вопроса

Дмитрий,
Вот, что выводит $result[«user_image»]

Дмитрий @Compolomus Куратор тега PHP
jabrik, а что в строке арбузера? Корень сайта? Тогда слэш в начале просто добавить.

Илхомжон Матазимов @mr_qpdb Автор вопроса

Дмитрий,
Просто строка

Илхомжон Матазимов @mr_qpdb Автор вопроса
Дмитрий, Кажется я понял, как решить. Надо возвратить корень сайта? Если да, то как это делается.

Дмитрий @Compolomus Куратор тега PHP
echo '
';
Ещё и кавычки не верные

Илхомжон Матазимов @mr_qpdb Автор вопроса

Дмитрий,
Теперь попросту не видит ту фотку в директории. Видимо что то вообще пошло не так. Почему не видит фотографию в директории? Она там 100% есть, я проверил несколько сотен раз

Илхомжон Матазимов @mr_qpdb Автор вопроса
Дмитрий, Вписал такой код:
$her = $result["user_image"]; echo __DIR__; echo $her;

Получился такой вывод
Может быть слеши нет так указаны

Дмитрий @Compolomus Куратор тега PHP
jabrik, ну слэша нет

Илхомжон Матазимов @mr_qpdb Автор вопроса
Дмитрий, везде, где я вхожу в директории — нету слеша, и работает все норм. Так же тут я попробовал и со слешом, но нихера не работает. Бл*, че не так делаю.

Дмитрий @Compolomus Куратор тега PHP
jabrik, я выше написал код

Илхомжон Матазимов @mr_qpdb Автор вопроса
Дмитрий, я вписал его, и не только. Потому как ваш код не сработал, я попробовал поманипулировать слешами, но увы.

Илхомжон Матазимов @mr_qpdb Автор вопроса
Дмитрий, сломанный php б**ть

ThunderCat @ThunderCat Куратор тега PHP
jabrik, та не, это вообще то больше к хтмл относится, с пхп у вас там все работает нормально, хотя и через ж.
Решения вопроса 2

ThunderCat @ThunderCat Куратор тега PHP
Не хочется писать «а я говорил».
1) НЕ ХРАНИТЕ В БАЗЕ ПУТИ, храните только имена файлов.
2) Не путайте (а вы я вижу серьезно запутались) абсолютные пути (они только для работы с файлами на сервере) и относительные пути (для отображения путей относительно сервера). В хтмл ВСЕГДА выносятся относительные пути. И относительный путь должен начинаться с / (корень сайта). У вас он начинается с имени папки. Слеш добавьте короче, а то он считает папку, добавляя эту строку к текущему урл.
3) Что, кстати возвращает нас к п.1, не надо хранить пути в базе.
4) Впереди вас ждет много интересного, так как рано или поздно у вас все равно вася пупкин и вася губкин зальют картинку с одним и тем же именем и у обоих будет одна аватарка на двоих, как этого избежать я уже писал.
