В сегодняшней практической статье мы рассмотрим все, что нужно знать начинающим о работе с базой данных 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');
Чтобы использовать любую базу данных в PHP (или других языках программирования), вам сначала нужно подключиться к серверу базы данных. Подключение к базе данных MySQL в PHP требует наличия некоторой информации. Вам необходимо получить следующие данные для установления соединения:
Для подключения к базе данных сначала необходимо подключиться к серверу базы данных 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(). Эта функция закрывает фактическое соединение с базой данных.
Теперь пришло время сделать что-то более интересное. Например, давайте попробуем извлечь данные из нашей таблицы. Для этого сначала нужно открыть соединение и выбрать соответствующую базу данных, как и раньше. Следующим шагом является отправка 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>";
}
?>
Как видите, это не сложная задача. В следующем разделе мы будем вставлять данные в базу данных.
В этом разделе мы создадим код для вставки новых записей в нашу базу данных 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);
?>
Помимо этого нам нужно проверить результат и сообщить пользователю, если произошла ошибка. Полный код вы найдете в конце данного урока.
Обновление данных почти такое же, как и вставка. Вам нужно только изменить оператор в SQL-запросе и использовать его, как и раньше:
<?php $sql = "UPDATE users SET age=45 WHERE name='Danilo'"; $result = mysqli_query($db_handle, $sql); ?>
Как вы, наверное, знаете, здесь примерно все одинаковое. Только нужно заменить оператор в SQL-запросе:
<?php $sql = "DELETE FROM users WHERE name='Danilo'"; $result = mysqli_query($db_handle, $sql); ?>
Здесь вы можете найти полный код, который демонстрирует все 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);
?>
Этот код является полностью рабочим, и вы можете использовать его на практике. Конечно, вы можете улучшить код и добавить свои данные, но для демонстрации этого кода вполне достаточно.
На сегодня все, спасибо за внимание!
WordPress годами был непревзойденным "монолитом": он отвечал и за удобную админ-панель, и за хранение данных,…
В мире веб-серверов часто говорят о противостоянии Nginx vs Apache. Но что, если бы я…
Когда я начинал свой путь в веб-разработке, вопрос "какой веб-сервер использовать?" практически не стоял. Ответ…
Когда речь заходит о веб-серверах, два имени всегда на слуху: Apache и Nginx. Apache —…
В мире веб-разработки мы постоянно сталкиваемся с проблемой: "А у меня на компьютере все работает!".…
На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…