Базы данных используются для удобного хранения информации, а также для её структурирования. Они являются очень важной вещью для создания динамических веб-сайтов.
Их используют для:
- Регистрации и авторизации на сайте (хранят регистрационные данные).
- Хранения статей и комментариев к ним.
- Организации поиска по веб-сайту.
В этой статье мы научимся вставлять, изменять, получать и защищать данные из БД MySQL, используя PHP.
Есть несколько вариантов подключения к базе данных MySQL, но самые лучшие варианты – mysqli и PDO.
Основная разница в том, что PDO может работать с огромным количеством баз данных: MySQL, Cubrid, Oracle, SQlite и так далее. А mysqli может работать только с MySQL.
В своей статье я покажу, как работать с PDO.
Примеры показывать буду на локальном сервере (xampp).
Создание БД и таблиц
Создать БД можно из панели управления хостингом, если есть такая возможность, а если нет, то из phpMyAdmin. Сравнение ставим utf8_general_ci.
Заходим в БД и создадим таблицу users, которую будем использовать для примера. Она будет включать колонки: ID(int), login(varchar) и pass(varchar). ID будет первичным ключом, а также будет иметь галочку напротив AI(auto increment), что позволит каждой новой записи присваивать id на 1 больше, чем у прошлой записи. Кроме этого, не забываем проставить длину varchar’ам и поставить сравнение utf8_general_ci к полям login и pass.
Получаем:
Теперь мы имеем готовую БД и таблицу для работы с ней.
Подключение к БД с помощью PHP
Создаём файл index.php и прописываем:
<?php $user = 'root'; // пользователь $password = ''; // пароль $db = 'mydb'; // название бд $host = 'localhost'; // хост $charset = 'utf8'; // кодировка // Создаём подключение $pdo = new PDO("mysql:host=$host;dbname=$db;cahrset=$charset", $user, $password); ?>
Мы создали подключение к БД. Подключение от PDO не нужно закрывать, оно само закрывается, когда скрипт завершает свою работу.
Выборка данных
Здесь я сделаю небольшое отступление. Выбирать данные можно:
- Ассоциативным массивом
PDO::FETCH_ASSOC — возвращает массив с названиями столбцов в виде ключей.
- Объектом
PDO::FETCH_OBJ — возвращает анонимный объект со свойствами, соответствующими именам столбцов.
Fetch() — каждый раз извлекает следующую строку.
Конец отступления.
Продолжаем скрипт:
// Создаём запрос $query = $pdo -> query('SELECT * FROM users'); // Перебираем способом ассоциативного массива while ($row = $query->fetch(PDO::FETCH_ASSOC)) { echo $row['login']."<br>"; }
Здесь мы обращаемся к массиву $row по индексу login.
В данном случае код выведет логин всех, кто есть в таблице.
// Перебираем способом объекта while ($row = $query->fetch(PDO::FETCH_OBJ)) { echo $row->login."<br>"; }
Здесь мы обращаемся к объекту $row по login.
В данном случае код выведет также логин всех, кто есть в таблице.
Выборка данных по параметру + защита
Мы можем выбирать определённые данные из таблицы. Например, мы можем выбрать все записи, где pass = 123, и тому подобные.
Вот первый пример выборки по логину + защита:
$login = 'Andre'; // Подставиться вместо знака вопроса $sql = 'SELECT * FROM users WHERE login = ?'; // Формируем запрос $query = $pdo -> prepare($sql); // Возвращает объект $query -> execute([$login]); // В скобках указываем то, что заменит знак вопроса. // Также перебираем массив, но теперь в массиве только те строки, где login = Andre while ($row = $query->fetch(PDO::FETCH_ASSOC)) { echo $row['id']; }
Можно указать несколько вопросительных знаков, а в execute перечислить замены для них через запятую.
Вот второй пример выборки по логину + защита:
$login = 'Andre'; // Подставится вместо :login // Формируем запрос с помощью ключа $sql = 'SELECT * FROM users WHERE login = :login'; $query = $pdo -> prepare($sql); // Возвращает объект // В кавычках нужно указать ключ, который мы указали в запросе. // А после передать значение, которое должно подставится. $query -> execute(['login' => $login]); // Также перебираем массив, но теперь в массиве только те строки, где login = Andre while ($row = $query->fetch(PDO::FETCH_ASSOC)) { echo $row['id']; }
Можно указать несколько ключей, а в execute перечислить замены для них через запятую в формате ‘ключ’ => значение.
Второй способ использовать предпочтительнее, так как читаемость и понятность кода более понятна, чем в первом примере, но использовать можно два способа.
Вставка данных по параметру + защита
$login = 'Lorem'; // Подставиться вместо :login $pass = 444; // Подставиться вместо :pass // Формируем запрос с помощью ключей $sql = 'INSERT INTO users (login, pass) VALUES (:login, :pass)'; $query = $pdo -> prepare($sql); // Возвращает объект // В кавычках нужно указать ключи, которые мы указали в запросе. // А после передать значение, которое должно подставится. $query -> execute(['login' => $login, 'pass' => $pass]);
Теперь можем проверить таблицу. Видим, что всё сработало правильно.
Обновление данных по параметру + защита
$id = 7; // Подставиться вместо :id $pass = 222; // Подставиться вместо :pass // Формируем запрос с помощью ключей $sql = 'UPDATE users SET pass = :pass WHERE id = :id '; $query = $pdo -> prepare($sql); // Возвращает объект // В кавычках нужно указать ключи, которые мы указали в запросе. // А после передать значение, которое должно подставится. $query -> execute(['pass' => $pass, 'id' => $id]);
Теперь можем проверить таблицу. Видим, что всё сработало правильно.
Заключение
Как видите, работать с PDO довольно легко. Теперь вы сами можете создавать веб-сайты с базами данных.
Надеюсь, что вам понравилась статья, и вы получили новые знания.
Всем спасибо за внимание!