Создание базы данных MySQL с помощью PHP
Узнайте, как создать базу данных MySQL с помощью PHP: подключение к серверу, выполнение CREATE DATABASE и создание таблицы внутри неё.
База данных — это именованный контейнер, который хранит таблицы, а каждая таблица содержит данные вашего приложения в строках и столбцах. Прежде чем сохранять пользователей, заказы или посты блога, этот контейнер должен существовать на сервере MySQL. В данной главе рассматривается полная последовательность действий в PHP: подключение к серверу, выполнение оператора CREATE DATABASE, а затем создание таблицы внутри базы данных.
Предполагается, что у вас уже установлены и запущены PHP и сервер MySQL (или MariaDB). Если шаг подключения завершится ошибкой, обратитесь к разделам PHP Connect to MySQL и PHP MySQLi для получения подробных сведений по настройке.
Два способа работы с MySQL
PHP поставляется с двумя современными расширениями для MySQL: MySQLi и PDO. Оба безопасны и поддерживаются; в этой главе используется MySQLi, поскольку он ориентирован именно на MySQL и легко читается, однако тот же SQL-запрос CREATE DATABASE работает и через PDO. Используйте PDO, если в будущем возможна смена СУБД, и отдавайте предпочтение подготовленным выражениям всякий раз, когда пользовательский ввод участвует в запросе.
Старые функции mysql_* были удалены в PHP 7 — не используйте их.
Шаг 1 — Подключение к серверу MySQL
Для создания базы данных вы подключаетесь к серверу, а не к конкретной базе данных (её ещё не существует). Передаются хост, имя пользователя и пароль, но не имя базы данных:
<?php
$servername = "localhost";
$username = "root";
$password = "";
// Create connection (no database name — we're about to create one)
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>new mysqli(...) возвращает объект соединения. Если что-то пошло не так, $conn->connect_error содержит сообщение об ошибке, а die() останавливает скрипт с этим сообщением. Имя пользователя и пароль в примере — заглушки; замените их своими учётными данными.
Три шага ниже показаны отдельными фрагментами для наглядности. В реальном проекте код подключения хранится в отдельном файле и подключается с помощью require или include.
Шаг 2 — Создание базы данных
Имея открытое соединение с сервером, выполните оператор CREATE DATABASE через $conn->query(). Для оператора, не возвращающего строки (например, CREATE, INSERT или UPDATE), query() возвращает TRUE при успехе и FALSE при ошибке:
<?php
// SQL to create a database named myDB
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>Совет: используйте CREATE DATABASE IF NOT EXISTS myDB, чтобы избежать ошибки, если база данных уже существует — это удобно в скриптах настройки, которые могут выполняться несколько раз.
Шаг 3 — Создание таблицы внутри базы данных
База данных сама по себе пуста. Данные хранятся в таблицах, которые определяются с помощью CREATE TABLE — имя таблицы, за которым следуют столбцы и их типы данных. На этот раз вы подключаетесь с указанием имени базы данных (четвёртый аргумент), чтобы новая таблица была создана в нужном месте:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Connect, this time selecting the myDB database
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL to create a table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
$conn->close();
?>Что означают определения столбцов:
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— уникальное целое число, автоматически генерируемое для каждой строки.UNSIGNEDозначает отсутствие отрицательных значений;PRIMARY KEYделает его идентификатором строки.VARCHAR(30)— текст переменной длины до 30 символов.NOT NULL— столбец всегда должен иметь значение.reg_date TIMESTAMP— устанавливается в текущее время при вставке и обновляется при каждом изменении строки.
Примечание: устаревший синтаксис с шириной отображения INT(6) признан устаревшим начиная с MySQL 8.0.17 и никогда не влиял на хранение или диапазон значений, поэтому предпочтительно использовать просто INT.
Распространённые ошибки и способы их устранения
- «Access denied for user» — неверное имя пользователя или пароль, либо пользователю не предоставлена привилегия
CREATE. Проверьте учётные данные и права доступа. - «Can't create database 'myDB'; database exists» — база данных уже существует. Удалите её сначала или используйте
CREATE DATABASE IF NOT EXISTS. $conn->errorпуст, но запрос завершился ошибкой — убедитесь, что вы сравниваете с=== TRUE; успешныйCREATEвозвращает булево значениеtrue, а не результирующий набор.
Что дальше
После создания базы данных и таблиц следующие шаги — добавление данных и их чтение:
- Insert Data into MySQL — добавление строк с помощью
INSERT INTO. - Select Data from MySQL — чтение строк с помощью
SELECT. - MySQL Prepared Statements — безопасный способ использования пользовательского ввода в запросах.
- Create a MySQL Table — подробное рассмотрение
CREATE TABLE.
Заключение
Создание базы данных MySQL в PHP сводится к трём действиям: открытие соединения с сервером, выполнение CREATE DATABASE, затем подключение к этой базе данных и выполнение CREATE TABLE. Проверка $conn->connect_error и возвращаемого значения query() на каждом шаге превращает незаметные сбои в понятные сообщения — привычка, которая делает весь остальной уровень работы с данными надёжным.