W3docs

Создание базы данных 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, а не результирующий набор.

Что дальше

После создания базы данных и таблиц следующие шаги — добавление данных и их чтение:

Заключение

Создание базы данных MySQL в PHP сводится к трём действиям: открытие соединения с сервером, выполнение CREATE DATABASE, затем подключение к этой базе данных и выполнение CREATE TABLE. Проверка $conn->connect_error и возвращаемого значения query() на каждом шаге превращает незаметные сбои в понятные сообщения — привычка, которая делает весь остальной уровень работы с данными надёжным.

Практика

Практика
Какой правильный синтаксис для создания базы данных в PHP с использованием MySQLi?
Какой правильный синтаксис для создания базы данных в PHP с использованием MySQLi?
Was this page helpful?