Як працювати з базою даних MySQL в PHP
В сьогоднішній практичній статті ми розглянемо все, що потрібно знати початківцям про роботу з базою даних MySQL в PHP. Тут ви знайдете докладну інформацію про те, як створити базу даних, як підключатися до бази даних, як вставляти, оновлювати і видаляти дані в базі даних MySQL за допомогою PHP.
Основи по роботі з базою даних MySQL в PHP
Як ви знаєте, за допомогою PHP ви можете створювати динамічний контент сайту. Динамічний контент не обов’язково вимагає бази даних, однак в більшості випадків вона потрібна. Всі системи управління контентом (CMS), блоги або прості обробники форми використовують базу даних. У світі PHP найбільш часто використовувана база даних – MySQL. Тому далі ми зосередимося на тому, як використовувати PHP і MySQL для створення динамічного контенту.
Переконайтеся, що у вас встановлена і правильно налаштована система, що підтримує як PHP, так і MySQL.
Створення тестової бази даних
У цьому розділі ми створимо базу даних MySQL з назвою test
, яка буде містити одну таблицю під назвою users
. Нижче представлений SQL-код, який створює базу даних, таблицю і вставляє деякі дані за замовчуванням. Ви можете використовувати SQL-запит в інструменті по роботі з базами даних – phpMyAdmin.
CREATE DATABASE if NOT EXISTS `test`; USE test; CREATE TABLE `users` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) DEFAULT NULL, `age` SMALLINT(6) DEFAULT NULL, `city` VARCHAR(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=latin1; INSERT INTO `users`(`id`,`name`,`age`,`city`) VALUES (1,'Ivan',25,'Kyiv'); INSERT INTO `users`(`id`,`name`,`age`,`city`) VALUES (2,'Petro',37,'Kharkiv'); INSERT INTO `users`(`id`,`name`,`age`,`city`) VALUES (3,'Galina',19,'Zaporizhzhia'); INSERT INTO `users`(`id`,`name`,`age`,`city`) VALUES (4,'Stepan',24,'Lviv'); INSERT INTO `users`(`id`,`name`,`age`,`city`) VALUES (5,'Natasha',20,'Odesa');
Підключення до бази даних MySQL за допомогою PHP
Щоб використовувати будь-яку базу даних в PHP (або іншими мовами програмування), вам спочатку потрібно з’єднатися з сервером бази даних. Підключення до бази даних MySQL в PHP вимагає наявності певної інформації. Вам необхідно отримати наступні дані для встановлення з’єднання:
- Ім’я хоста (hostname)
- Ім’я користувача бази даних (username)
- Ім’я бази даних (database)
- Пароль (password)
Для підключення до бази даних спочатку необхідно підключитися до сервера бази даних MySQL, а на наступному кроці вибрати необхідну базу даних. Звичайно, якщо з’єднання з сервером не вдалося, то немає сенсу продовжувати сценарій, тому ми обриваємо підключення. Давайте подивимося, як це виглядає в PHP:
<?php $db_handle = mysqli_connect("localhost", "username", "password"); if($db_handle === false){ die("ПОМИЛКА: Неможливо підключитися. " . mysqli_connect_error()); } echo "Підключення до сервера пройшло успішно! <br>"; mysqli_select_db($db_handle, "test") or die(mysqli_error()); echo "База даних була обрана!"; mysqli_close($db_handle); ?>
Як ви можете бачити, функція mysqli_connect()
встановлює з’єднання з сервером MySQL, і в якості наступного кроку ми можемо обрати базу даних за допомогою функції mysqli_select_db()
.
ВАЖЛИВО! Зверніть увагу, що ми використовуємо mysqli_connect()
замість mysql_connect()
, оскільки останнє розширення застаріло починаючи з версії PHP 5.5.0 і було видалено в PHP 7.0.0.
Якщо ви виконаєте наведений вище скрипт, ви повинні побачити наступне (за умови, що ваші дані для підключення коректні):
Підключення до сервера пройшло успішно! База даних була обрана!
Закриття з’єднання з базою даних
Перш ніж продовжимо, ми хочемо згадати одну важливу деталь. Мається на увазі закриття з’єднання з базою даних. Починаючи з PHP 4, вам не потрібно закривати з’єднання з базою даних, як описано вище. Це робиться автоматично збирачем сміття PHP. Однак рекомендується закривати з’єднання з базою даних, щоб звільняти ресурси і пам’ять. Ви можете закрити з’єднання з базою даних MySQL, викликавши функцію mysqli_close()
. Ця функція закриває фактичне з’єднання з базою даних.
Отримання даних за допомогою PHP з бази даних MySQL
Тепер прийшов час зробити щось більш цікаве. Наприклад, давайте спробуємо витягти дані з нашої таблиці. Для цього спочатку потрібно відкрити з’єднання і вибрати відповідну базу даних, як і раніше. Наступним кроком є відправка SQL-запиту – в даному випадку оператора SELECT – в базу даних. Тепер спробуйте отримати всі записи з MySQL бази. Приклад SQL-запиту для цього:
SELECT * FROM users;
Нам потрібно надіслати цю команду на сервер і зберегти відповідь. Ми можемо зробити це, використовуючи функцію mysqli_query()
наступним чином:
<?php $db_handle = mysqli_connect("localhost", "username", "password"); if($db_handle === false){ die("ПОМИЛКА: Неможливо підключитися. " . mysqli_connect_error()); } mysqli_select_db($db_handle, "test") or die(mysqli_error()); $result = mysqli_query($db_handle, "SELECT * FROM users"); echo $result; ?>
Цей запит робочий, але як відобразити дані зі змінної $result
? Якщо ви спробуєте вивести її за допомогою echo
, ви отримаєте щось на зразок цього:
PHP Recoverable fatal error: Object of class mysqli_result could not be converted to string
Це не те, що нам потрібно. Для правильного відображення обраних даних вам потрібно зробити трохи більше. У PHP є функції, які ви можете використовувати для отримання даних з результуючого набору бази даних MySQL. Ось ці функції:
mysqli_fetch_assoc()
– витягує результуючий ряд у вигляді асоціативного масивуmysqli_fetch_row()
– отримує рядки результуючої таблиці у вигляді масивуmysqli_fetch_array()
– витягує рядок результату як асоціативний масив, звичайний масив або обидва
Всі вони перетворять один запис результату в масив, і пізніше ви можете використовувати цей масив на свій розсуд. Для отримання масиву необхідно викликати одну з вищезгаданих функцій. В даному прикладі ми використовуємо асоціативну версію.
<?php $row = mysqli_fetch_assoc($result); echo "ID: " . $row['id'] . ", Ім’я:" . $row['name'] . ", Вік:" . $row['age'] . ", Місто:" . $row['city'] . "<br>"; ?>
Однак функція повертає тільки один запис, а в наборі результатів повинно бути 5 записів. Щоб обробити всі записи, нам потрібно створити цикл. Функції вибірки повертають масив, якщо в наборі результатів є запис, і повертають false
, якщо записів більше немає. Для вибірки ми будемо використовувати простий цикл while:
<?php $result = mysqli_query($db_handle, "SELECT * FROM users"); while($row = mysqli_fetch_assoc($result)){ echo "ID: " . $row['id'] . ", Ім’я:" . $row['name'] . ", Вік:" . $row['age'] . ", Місто:" . $row['city'] . "<br>"; } ?>
Як бачите, це не складне завдання. У наступному розділі ми будемо вставляти дані в базу даних.
Як вставляти, оновлювати, видаляти записи в базі даних
Вставка даних в базу даних за допомогою PHP
У цьому розділі ми створимо код для вставки нових записів в нашу базу даних MySQL. Це досить легко. Нам також потрібно створити з’єднання з базою даних, і ми знову будемо використовувати функцію mysqli_query()
. Однак в цьому випадку ми будемо використовувати її з оператором вставки в SQL. Тепер давайте спробуємо додати нового користувача в нашу таблицю. Даний SQL-запит буде виглядати наступним чином:
INSERT INTO users (name,age,city) VALUES ('Danilo',44,'Dnipro');
Тепер збережіть цей SQL-запит у змінній і передайте його в якості параметра mysqli_query
наступним чином:
<?php $sql = "INSERT INTO users (name,age,city) VALUES ('Danilo',44,'Dnipro')"; $result = mysqli_query($db_handle, $sql); ?>
Крім цього нам потрібно перевірити результат і повідомити користувачеві, якщо сталася помилка. Повний код ви знайдете в кінці цього уроку.
Оновлення даних в базі даних за допомогою PHP
Оновлення даних майже таке ж, як і вставка. Вам потрібно лише змінити оператор в SQL-запиті і використовувати його, як і раніше:
<?php $sql = "UPDATE users SET age=45 WHERE name='Danilo'"; $result = mysqli_query($db_handle, $sql); ?>
Видалення даних з бази даних за допомогою PHP
Як ви, напевно, знаєте, тут приблизно все однакове. Тільки потрібно замінити оператор в SQL-запиті:
<?php $sql = "DELETE FROM users WHERE name='Danilo'"; $result = mysqli_query($db_handle, $sql); ?>
Повний приклад скрипта PHP по роботі з базою даних MySQL
Нижче ви побачите повний код, який демонструє всі 4 основних оператора SQL. За допомогою цього коду ви дізнаєтеся, як використовувати PHP для внесення змін в дані в базі даних MySQL.
<?php $db_handle = mysqli_connect("localhost", "username", "password"); if($db_handle === false){ die("ПОМИЛКА: Неможливо підключитися. " . mysqli_connect_error()); } mysqli_select_db($db_handle, "test") or die(mysqli_error()); echo "<br>Крок 1. Вставка даних<hr>"; $sql = "INSERT INTO users (name,age,city) VALUES ('Danilo',44,'Dnipro')"; $result = mysqli_query($db_handle, $sql); if ($result){ echo "Дані були вставлені!<br>"; } else { echo "Сталася помилка під час вставки!<br>"; } $result = mysqli_query($db_handle, "SELECT * FROM users"); while($row = mysqli_fetch_assoc($result)){ echo "ID: " . $row['id'] . ", Ім’я:" . $row['name'] . ", Вік:" . $row['age'] . ", Місто:" . $row['city'] . "<br>"; } echo "<br>Крок 2. Оновлення даних<hr>"; $sql = "UPDATE users SET age=45 WHERE name='Danilo'"; $result = mysqli_query($db_handle, $sql); if ($result){ echo "Дані були оновлені!<br>"; } else { echo "Сталася помилка під час оновлення!<br>"; } $result = mysqli_query($db_handle, "SELECT * FROM users"); while($row = mysqli_fetch_assoc($result)){ echo "ID: " . $row['id'] . ", Ім’я:" . $row['name'] . ", Вік:" . $row['age'] . ", Місто:" . $row['city'] . "<br>"; } echo "<br>Крок 3. Видалення даних<hr>"; $sql = "DELETE FROM users WHERE name='Danilo'"; $result = mysqli_query($db_handle, $sql); if ($result){ echo "Дані були видалені!<br>"; } else { echo "Сталася помилка під час видалення!<br>"; } $result = mysqli_query($db_handle, "SELECT * FROM users"); while($row = mysqli_fetch_assoc($result)){ echo "ID: " . $row['id'] . ", Ім’я:" . $row['name'] . ", Вік:" . $row['age'] . ", Місто:" . $row['city'] . "<br>"; } mysqli_close($db_handle); ?>
Цей код є повністю робочим, і ви можете використовувати його на практиці. Звичайно, ви можете поліпшити код і додати свої дані, але для демонстрації цього коду цілком достатньо.
На сьогодні все, дякуємо за увагу!