Практическое занятие № 21
Тема: «Создание подключения к базе данных»
Цель работы: приобретение навыков подключения PHP кода к базе данных MySQL.
Краткие теоретические основания выполнения задания Основы работы в phpMyAdmin Создание пользователя MySQL
Откройте [Меню → Дополнительно → PHPMyAdmin]
Введите имя пользователя root без пароля (по умолчанию)
В PhpMyAdmin откройте раздел [Привилегии]
Нажмите ссылку [Добавить нового пользователя]
Заполните форму и нажмите кнопку [Создать пользователя]
Информация
В том случае, если помимо прочих привилегий для пользователя будет отмечена привилегия SUPER, то кодировка, установленная по умолчанию в настройках MySQL сервера, не будет на него
действовать. Кодировку нужно будет указывать в ваших скриптах персонально для каждого подключения к MySQL, потому отмечать привилегию SUPER не рекомендуется.
Создание базы данных MySQL
Откройте [Меню → Дополнительно → PHPMyAdmin]
Используйте для входа root без пароля (по умолчанию)
В PhpMyAdmin откройте раздел [Базы данных]
Введите название новой базы данных и выберите её кодировку
Нажмите кнопку [Создать]
Как войти в PhpMyAdmin / MySQL менеджер
Откройте [Меню → Дополнительно → PhpMyAdmin / MySQL менеджер]
Введите имя пользователя root без пароля
Нажмите кнопку [Вход]
Указание кодировки подключения к MySQL серверу
... здесь ваш php код подключения к mysql серверу ...
... далее вставьте строки указанные ниже ...
mysql_query("set names cp1251");
mysql_query("set character_set_server=cp1251");
?
Кодировка cp1251 - русская, её можно заменить на имя любой нужной вам кодировки.
Переключение модулей баз данных
Будьте внимательны при смене активного модуля базы данных. Каждый модуль имеет свое
отдельное хранилище баз и настроек, они никак не связаны друг с другом, поэтому вы не увидите созданные вами базы данных при переключении на другой модуль.
Длительное подключение к MySQL (более 1 сек)
Перед началом использования OSPanel следует отключить протокол IPv6 через [Меню → Закладки → Фиксы реестра → Отключение IPv6]. Если этого не сделать, то процесс подключения в MySQL серверу может выполняться очень долго (более 1 сек) и скорость выполнения php скриптов вас не порадует.
Интерфейс
Теперь пора более детально остановиться на интерфейсе программы. Перед вами открылось главное окно, оно выглядит вот так:
Условно его можно разделить на несколько частей:
Боковая панель — находится слева, тут отображается вертикальный список доступных для вас в данный момент баз данных, а также их таблиц. Вы можете развернуть каждую из них чтобы посмотреть таблицы. Также тут есть быстрые кнопки — обновить, домой и так далее;
Главное меню — это полоска, которая находится под именем сервера. Именно с помощью нее мы будем перемещаться по различным возможностям программы, таким как базы
данных, пользователи, экспорт и импорт и так далее;
Рабочая область — тут отображается рабочая информация, сейчас, в главном окне тут находится информация о сервере, в других же случаях может находится содержимое базы данных или поле ввода текста.
Как видите, все довольно просто, несмотря на то, что на первый взгляд, интерфейс может показаться сложным.
Создание базы данных
Теперь нас интересует первая вкладка меню. Базы данных. Здесь вы увидите список доступных вам
баз данных, а также поле для создания новой базы над ними. Введите в это поле имя для новой базы, а затем выберите кодировку utf8-general-ci:
После этого нажмите кнопку «Создать». Будет создана новая база данных, и вы сразу перейдете в нее. Теперь вы управляете только ею и главное меню немного изменилось.
Создание таблиц
Обычно, различные движки создают себе сами таблицы, но на случай, если вы захотите создать базу данных phpMyAdmin для собственного приложения, мы рассмотрим как делать таблицы. Как только вы попали на вкладку «Структура», вам будет выведен список доступных таблиц, а также возможность добавить новую. Введите имя таблицы в поле, а также выберите количество столбцов.
На следующем шаге нам предстоит выбрать типы данных для столбцов и их имена:
Я создам четыре поля:
id – тип integer, не забудьте поставить ему галочку AUTO_INCREMENT (чтобы в этом столбце номера проставлялись автоматически).
name (англ. имя) – тип varchar, размером в 256 знаков.
age (англ. возраст) - тип integer.
salary (англ. зарплата) - тип integer.
Внизу окна можно еще выбрать тип движка таблиц. Самый популярный — InnoDB, он самый производительный, но требователен к ресурсам. Можно еще выбрать AriaDB, но тогда производительность упадет. Когда завершите, нажмите кнопку «Сохранить» в самом низу:
Далее вы попадете на страницу этой таблицы и меню снова изменится. Тут вы можете настроить
связи между таблицами, изменить ее структуру, добавить новые поля, выполнить поиск и вставить новые записи.
Вставка записей
PhpMyAdmin позволяет делать практически все с таблицами баз данных, самое простое, что мы можем сейчас сделать — это вставить новую запись. Для этого перейдите на вкладку «Вставить»:
Здесь вы можете вставить несколько записей за один раз. Заполнять нужно только те поля, для которых не были заданы значения по умолчанию.
Когда завершите, пролистайте в самый низ и нажмите «Вперед». Здесь же можно установить количество полей, которые вы хотите добавить.
Далее перед вами откроется либо редактор SQL с только что выполненным запросом, либо обзор полей таблицы:
Выполнение SQL запроса
Если вы не знаете как пользоваться phpMyAdmin для выполнение того или иного действия, но знаете как его выполнить через SQL, то это не проблема в phpMyAdmin можно выполнить любой SQL запрос. Для этого в меню таблицы или базы данных перейдите на вкладку SQL:
Сразу же тут вы найдете различные шаблоны для запросов.
Или можете ввести нужный запрос сами, вручную. Для выполнения запроса нажмите «Вперед». Перед вами откроется результат запроса, если были получены какие-либо поля, то они будут выведены, если же нет, то просто будет выведено сообщение о том, что все прошло успешно.
Создание пользователя
С основными операциями над базой данных мы разобрались, как вы могли убедится, работа с phpMyAdmin очень проста, теперь давайте рассмотрим, как настроить привилегии. Сначала нам нужно создать пользователя для базы данных. Для этого перейдите на домашний экран, а затем выберите «Учетные записи пользователей»:
Здесь отображен список всех пользователей, если вы авторизовались не от имени root, то, возможно, вам придется выйти и авторизоваться заново. Под списком есть ссылка «Добавить учетную запись
пользователя»:
Тут вам нужно заполнить несколько полей. Во-первых, это имя пользователя. Оно может состоять из символов английского алфавита, цифр или дефиса, другие символы использовать можно, но лучше не нужно во избежание проблем. Следующее поле — это хост, с которого сможет авторизоваться этот пользователь, по умолчанию установлено значение %, это любой хост. Но нам нужно чтобы пользователь мог войти только локально, поэтому пишем localhost. Следующие два поля — пароль:
Чуть ниже вы можете создать базу данных с таким же именем, как у пользователя, или же настроить для него глобальные привилегии. Когда завершите, нажмите «Вперед».
Привилегии пользователя
Еще нам нужно дать пользователю возможность работать только с одной базой данных. Поэтому после создания пользователя откройте его в списке и перейдите на вкладку «База данных»:
Здесь вам нужно выбрать базу данных, к которой у пользователя будет доступ, например, site-control:
Дальше нажмите «Вперед». На следующем экране вам нужно отметить права, которые будут у пользователя на эту базу, можно просто нажать «Отметить все»:
На вкладке «Глобальные» вы все еще можете изменить глобальные привилегии пользователя.
Экспорт и импорт
Резервное копирование базы данных имеет очень важное значение. И эту функцию вы можете выполнять с помощью Phpmyadmin. Для этого перейдите на вкладку «Экспорт»:
В быстром режиме можно выполнить резервное копирование всех баз в формате SQL. Просто нажмите «Вперед»:
Для импорта перейдите на вкладку «Импорт» и выберите файл *.sql из которого вы хотите импортировать команды.
Работа с базами данных SQL в PHP Как работать с mySQL через PHP
Работа с БД из PHP осуществляется всего лишь с помощью трех функций:
mysqli_connect – соединение с сервером и базой данных.
mysqli_query - универсальная функция отправки запросов к БД, с помощью нее можно сделать все.
mysqli_error - вывод ошибок.
Далее подробнее про каждую из функций.
Устанавливаем соединение с БД
Прежде, чем начать работать с базой данных из PHP, нужно установить соединение с сервером, на котором эта база находится.
Делается это с помощью функции PHP mysql_connect, которая принимает 3 параметра: имя хоста
(сервера), имя пользователя, под которым мы работаем с базой и пароль для этого пользователя.
Если вы работаете на своем компьютере то это будут 'localhost', 'root' и пароль в виде пустой строки (на некоторых серверах он тоже может быть root). Если ваша база данных в интернете - то эти данные дает вам хостер.
Давайте установим соединение с базой данных:
//Устанавливаем доступы к базе данных:
$host = 'localhost'; //имя хоста, на локальном компьютере это
localhost
$user = 'root'; //имя пользователя, по умолчанию это root
$password = ''; //пароль, по умолчанию пустой
$db_name = 'test'; //имя базы данных
//Соединяемся с базой данных используя наши доступы:
$link = mysqli_connect($host, $user, $password, $db_name);
/*
Соединение записывается в переменную $link,
которая используется дальше для работы mysqi_query.
*/
?
Посылаем запросы к базе данных
Запросы к базе данных представляют собой обычные строки, которые мы вставляем в функцию PHP
mysqli_query (первым параметром это функция принимает переменную, в которую мы записали результат mysqli_connect, в нашем случае это переменная $link):
//Внутри функции PHP mysqli_query стоит обычная строка: mysqli_query($link, "SELECT*FROM workers WHERE id0");
//Мы можем формировать эту строку с помощью переменных:
$table = 'workers'; //задаем имя таблицы в переменной mysqli_query($link, "SELECT*FROM ".$table." WHERE id0");
?
Принято правило, по которому команды SQL следует писать в верхнем регистре (то есть большими буквами), а все остальное - в нижнем.
Это относиться к командам SELECT, UPDATE, FROM, DELETE, WHERE и другим такого рода.
Конечно, синтаксической ошибки не будет, если вы напишите их маленькими буквами, но принято большими.
Отлавливаем ошибки базы данных
Многие начинающие зачастую не умеют отлавливать ошибки, которые вернула база данных.
Поэтому при работе с БД у них постоянно возникают сложности. Что-то не работает, а что - не понятно, так как ошибок они не видят, так как PHP не выводит ошибки mySQL, если ему об этом не сказать
Чтобы вывести ошибки, следует пользоваться конструкцией or die ( mysqli_error($link) ), которую необходимо добавлять к каждому запросу к БД.
Смотрите пример: mysqli_query($link, $query) or die( mysqli_error($link) );
Таким образом вы сразу будете получать сообщения об ошибках синтаксиса SQL. Обратите внимание на то, что на рабочем сайте эти конструкции следует удалять, чтобы пользователи и тем более хакеры не видели ошибок БД.
Проблемы с кодировками
Зачастую у новичков возникает проблема с кодировками - казалось бы нормальный русский текст в базу данных записывается абракадаброй или вопросиками.
Чтобы не было проблем с кодировками следует придерживаться простых правил:
Базу данных следует создавать в кодировке utf8_general_ci.
Документ PHP должен быть в кодировке utf8.
Таблицы в БД должны быть в utf8_general_ci.
На всякий случай сразу после команды mysqli_connect добавьте такое запрос: mysqli_query($link, "SET NAMES 'utf8'");
Начнем практиковаться
Сейчас мы с вами начнем изучить SQL запросы на практике. Для этого нам понадобится тестовая таблица в базе данных, заполненная некоторыми данными. Сейчас мы с вами ее сделаем и заполним.
Итак, создайте свою первую базу данных с помощью PhpMyAdmin. Назовите ее "test".
Создайте в этой базе новую таблицу. Назовите ее "workers" (англ. работники).
В ней создайте 4 столбца (столбцы по другому называются поля):
id – тип integer, не забудьте поставить ему галочку AUTO_INCREMENT (чтобы в этом столбце номера проставлялись автоматически).
name (англ. имя) – тип varchar, размером в 256 знаков.
age (англ. возраст) - тип integer.
salary (англ. зарплата) - тип integer.
Ее заполните тестовыми данными, как показано в таблице ниже (этот шаг обязателен, так как дальше все задачи будут по этой таблице):
id | name | age | salary |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Итак, у нас есть таблица с работниками фирмы, в которой указаны их имена, возрасты и зарплаты (в
$). Далее мы будем работать с этой таблицей.
Тестируем работоспособность
Прежде чем начать работу, следует протестировать работоспособность - попробуем сделать какой- нибудь запрос к нашей базе.
Просто скопируйте этот код и запустите его у себя:
//Устанавливаем доступы к базе данных:
$host = 'localhost'; //имя хоста, на локальном компьютере это
localhost
$user = 'root'; //имя пользователя, по умолчанию это root
$password = ''; //пароль, по умолчанию пустой
$db_name = 'test'; //имя базы данных
//Соединяемся с базой данных используя наши доступы: mysqli_connect($host, $user, $password, $db_name) or
die(mysqli_error($link));
//Устанавливаем кодировку (не обязательно, но поможет избежать проблем):
mysqli_query($link, "SET NAMES 'utf8'");
//Формируем тестовый запрос:
$query = "SELECT * FROM workers WHERE id 0";
//Делаем запрос к БД, результат запроса пишем в $result:
$result = mysqli_query($link, $query) or die(mysqli_error($link));
//Проверяем что же нам отдала база данных, если null – то какие-то проблемы:
var_dump($result);
?
Если var_dump($result) вернет resource, то все работает, если же null – то возникли какие-то проблемы.
В таком случае проверьте все еще раз, уберите последовательно все ошибки PHP, если таковые есть.
Как достать результат
После того, как мы сделали запрос к базе, в переменной $result будет лежать результат этого действия.
Однако лежит он не в той форме, которая нам нужна в PHP, а в той форме, в которой его прислала нам база.
Достать результат в нормальном виде (в массиве) можно с помощью следующего кода:
//Делаем запрос к БД, результат запроса пишем в $result:
$result = mysqli_query($link, $query) or die(mysqli_error($link));
//Преобразуем то, что отдала нам база в нормальный массив PHP $data: for ($data = []; $row = mysqli_fetch_assoc($result); $data[] =
$row);
?
Как работает последняя строка?
Функция mysqli_fetch_assoc считывает последовательно каждую строку результата, который прислала нам база.
В цикле for мы считываем построчно результат из базы.
Когда цикл дойдет до последней строки - mysqli_fetch_assoc вернет false и цикл for закончит свою работу.
А результат из БД будет лежать в нормальном виде в массиве $data.
Оборудование, материалы
Персональный компьютер с установленной ОС. Текстовый редактор Notepad++ или аналогичный. Open Server.
Порядок выполнения задания
Изучите краткие теоретические основания выполнения задания.
Создайте новый проект в среде OSPanel. В нем создайте файл index.php.
Сформируйте в файле index.php корректную html структуру, содержащую doctype, контейнеры html, head, title, пустой контейнер body и метатеги в соответствии со спецификацией html5.
Выполните задания в тексте. В результате вы должны получить базу данных, содержащую одну таблицу и PHP страницу index.php с подключением и запросом к базе.
Выведите на страницу содержимое массива $data с помощью var_dump.
Вопросы для повторения
С помощью какой функции можно осуществить подключение к базе данных?
С помощью какой функции можно отправить запрос к базе данных, используя ранее созданное подключение?
Для чего нужна функция вывода ошибок?
Можно ли создать базу данных не используя phpMyAdmin?
Каким образом можно получить результат запроса к базе данных в виде массива?
Ресурсы и ссылки
http://code.mu/books/php/sql/