W3docs

Создание таблицы MySQL с помощью PHP

Узнайте, как создать таблицу MySQL с помощью PHP, используя mysqli и PDO. Синтаксис CREATE TABLE, типы данных, первичные ключи и частые ошибки.

Таблица — это место, где MySQL фактически хранит строки данных. Прежде чем вставлять пользователей, товары или записи, таблица, в которой они будут храниться, должна существовать с заданным набором столбцов и типом данных каждого из них. На этой странице показано, как создать таблицу MySQL из PHP с помощью расширений mysqli и PDO, разобран синтаксис CREATE TABLE по частям, а также рассмотрены наиболее распространённые ошибки.

Если вы ещё не создали базу данных, в которой будет находиться таблица, сделайте это сначала — см. Создание базы данных MySQL. Для более подробного изучения самого подключения см. Подключение к MySQL с помощью PHP.

Как работает создание таблицы

Из PHP создание таблицы всегда состоит из трёх шагов:

  1. Подключиться к серверу MySQL и выбрать базу данных. Таблица должна принадлежать базе данных, поэтому подключение должно знать, какую именно использовать.
  2. Сформировать SQL-запрос CREATE TABLE в виде строки. Это обычный SQL — PHP просто передаёт его серверу.
  3. Выполнить запрос с помощью mysqli_query() (mysqli) или $pdo->exec() (PDO) и проверить, успешно ли он выполнился.

Самая распространённая ошибка новичков — подключение без указания базы данных. Тогда CREATE TABLE завершится ошибкой «No database selected», потому что серверу некуда поместить таблицу. В примерах ниже имя базы данных всегда передаётся явно, поэтому такого не произойдёт.

Подключение и выбор базы данных

mysqli_connect() принимает имя сервера, имя пользователя и пароль — а также, что важно, необязательный четвёртый аргумент: имя базы данных. Передайте его, чтобы новая таблица знала, где находится.

<?php

$server   = "localhost";
$username = "username";
$password = "password";
$database = "my_app"; // the database the table will be created in

$conn = mysqli_connect($server, $username, $password, $database);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

?>
Информация

Если вы создаёте базу данных в том же скрипте, вызовите mysqli_select_db($conn, "my_app") после её создания, либо переподключитесь с именем базы данных в качестве четвёртого аргумента перед выполнением CREATE TABLE.

Создание таблицы с помощью mysqli

После того как соединение выбрало базу данных, выполните запрос CREATE TABLE с помощью mysqli_query(). Функция возвращает true при успехе и false при ошибке, поэтому всегда проверяйте результат и выводите mysqli_error() в случае неудачи — это сообщение точно укажет, что пошло не так.

Следующий код создаёт таблицу users с тремя столбцами: id, name и email.

<?php

$sql = "CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email VARCHAR(50) NOT NULL UNIQUE
)";

if (mysqli_query($conn, $sql)) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($conn);
}

?>

Что означает каждая часть запроса

  • id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY — целое число, которое не может быть отрицательным (UNSIGNED), автоматически увеличивается на единицу при добавлении каждой новой строки (AUTO_INCREMENT) и уникально идентифицирует каждую строку (PRIMARY KEY). Практически в каждой таблице есть такой столбец.
  • name VARCHAR(30) NOT NULL — строка переменной длины до 30 символов. NOT NULL означает, что значение обязательно; вставка без имени будет отклонена.
  • email VARCHAR(50) NOT NULL UNIQUE — обязательная строка с ограничением UNIQUE, поэтому MySQL откажется хранить две строки с одинаковым адресом электронной почты.

Распространённые типы данных столбцов

ТипПрименяется дляПример
INTЦелые числа, ID, счётчикиviews INT
VARCHAR(n)Короткий текст до n символовname VARCHAR(50)
TEXTДлинный текст (статьи, комментарии)body TEXT
DECIMAL(p,s)Точные десятичные числа, например ценыprice DECIMAL(8,2)
DATE / DATETIMEДаты и временны́е меткиcreated_at DATETIME
BOOLEANФлаги true/falseactive BOOLEAN

Создание таблицы с помощью PDO

PDO — более современный и переносимый API, предпочтительный для новых проектов. SQL-запрос идентичен — меняется только PHP-обёртка. При использовании PDO в режиме исключений вместо проверки возвращаемого значения оборачивайте вызов в try/catch.

<?php

$dsn = "mysql:host=localhost;dbname=my_app";

try {
    $pdo = new PDO($dsn, "username", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "CREATE TABLE users (
        id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(30) NOT NULL,
        email VARCHAR(50) NOT NULL UNIQUE
    )";

    $pdo->exec($sql);
    echo "Table created successfully";
} catch (PDOException $e) {
    echo "Error creating table: " . $e->getMessage();
}

?>

Как избежать ошибки «таблица уже существует»

Если выполнить запрос CREATE TABLE дважды, второй запуск завершится ошибкой «Table 'users' already exists». Добавьте IF NOT EXISTS, чтобы запрос был безопасен для повторного выполнения — MySQL просто пропустит создание, если таблица уже существует.

<?php

$sql = "CREATE TABLE IF NOT EXISTS users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email VARCHAR(50) NOT NULL UNIQUE
)";

mysqli_query($conn, $sql);

?>

Частые ошибки и способы их устранения

  • «No database selected» — вы подключились без указания базы данных. Передайте её четвёртым аргументом в mysqli_connect() или используйте mysqli_select_db().
  • «Table 'users' already exists» — используйте CREATE TABLE IF NOT EXISTS или сначала удалите старую таблицу.
  • «You have an error in your SQL syntax» — как правило, лишняя запятая после последнего столбца или зарезервированное слово, например order, используемое как имя столбца без обратных кавычек. Заключайте такие имена в обратные кавычки: `order`.
  • «Access denied for user» — у учётной записи MySQL нет привилегий CREATE для этой базы данных.

Следующие шаги

Теперь, когда таблица существует, вы можете начать работу с данными в ней:

Итог

Создание таблицы из PHP сводится к трём шагам: подключиться с выбранной базой данных, написать запрос CREATE TABLE, определяющий каждый столбец и его тип, и выполнить его с помощью mysqli_query() или PDO::exec(). Всегда проверяйте ошибки, добавляйте IF NOT EXISTS для скриптов, которые могут выполняться повторно, и выбирайте подходящий тип данных для каждого столбца, чтобы MySQL хранил данные эффективно и безопасно.

Практика

Практика
Какие шаги необходимы для создания таблицы MySQL в PHP?
Какие шаги необходимы для создания таблицы MySQL в PHP?
Was this page helpful?