PHP: работа с БД MySQL

1 комментарий
PHP: работа с БД MySQL

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

Их используют для:

  1. Регистрации и авторизации на сайте (хранят регистрационные данные).
  2. Хранения статей и комментариев к ним.
  3. Организации поиска по веб-сайту.

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

Надеюсь, что вам понравилась статья, и вы получили новые знания.

Всем спасибо за внимание!

Хостинг Timeweb

Комментарии

...а если phpMyAdmin тоже нет "такая возможность"... Вы уж либо ничего не пишите, либо пишите все условия выполнения рецепта. Включая ту незначительную деталь, что php-расширение "PDO" должно быть установлено...