Формирование новой БД через PHP

Раздел: PHP программирование -> Базы данных в PHP

Создание базы данных средствами PHP

Разработка начинается с формирования хранилища информации. Для этого используются расширения PDO или mysqli. Основной подход предполагает подключение к серверу MySQL и отправку SQL-запроса CREATE DATABASE. Рассмотрим наиболее стабильный и переносимый вариант на основе PDO.

Как создать новую базу данных MySQL с помощью PDO?


<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$dbname = 'new_database';

try {
    $pdo = new PDO("mysql:host=$host", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE `$dbname`";
    $pdo->exec($sql);
    echo "База данных успешно создана";
} catch (PDOException $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>

Php база данных сайт (база данных сайта на php)

Подключение осуществляется без указания имени существующей базы. Запрос выполняется через exec(), который возвращает количество затронутых строк. Обработка исключений позволяет перехватить ошибки, например, недостаток привилегий или неверные параметры подключения.

Типичные ошибки:

  • Access denied – пользователь не имеет права создавать базы. Решение: выдать грант CREATE или использовать учётную запись с полными правами.
  • Database exists – попытка повторного создания. Решение: перед CREATE проверить существование запросом SHOW DATABASES LIKE '...' или использовать конструкцию CREATE DATABASE IF NOT EXISTS.
  • Пустое имя базы – необходимо валидировать пользовательский ввод.

Как создать базу данных в PHP с использованием расширения mysqli в объектном стиле?


<?php
$mysqli = new mysqli('localhost', 'root', '');
if ($mysqli->connect_error) {
    die("Ошибка подключения: " . $mysqli->connect_error);
}
$sql = "CREATE DATABASE IF NOT EXISTS example_db";
if ($mysqli->query($sql) === TRUE) {
    echo "База данных создана или уже существует";
} else {
    echo "Ошибка: " . $mysqli->error;
}
$mysqli->close();
?>

Php запросы в базу данных (запросы к базе данных в php)

Метод query() подходит для запросов, не возвращающих набор строк. Конструкция IF NOT EXISTS предотвращает ошибку дублирования. Для работы с кодировками рекомендуется сразу после создания базы установить set_charset('utf8mb4').

Возможные сложности:

  • При использовании старых версий PHP или MySQL могут не поддерживаться некоторые параметры.
  • Если база уже существует, но операция CREATE DATABASE без IF NOT EXISTS возвращает ошибку – требуется корректная обработка.

Как выполнить создание базы данных процедурным способом с mysqli?


<?php
$link = mysqli_connect('localhost', 'root', '');
if (!$link) {
    die('Ошибка соединения: ' . mysqli_connect_error());
}
$query = "CREATE DATABASE IF NOT EXISTS `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if (mysqli_query($link, $query)) {
    echo "База данных test_db готова к работе";
} else {
    echo "Не удалось создать базу: " . mysqli_error($link);
}
mysqli_close($link);
?>

Процедурный интерфейс удобен для быстрых скриптов без ООП. Рекомендуется указывать набор символов и правила сравнения. Ошибки перехватываются через mysqli_error().

Если скрипт выполняется на сервере с ограниченным окружением, возможно отсутствие расширения mysqli. В таком случае следует применять PDO или убедиться в установке модуля.

- файл dbconn php (файл dbconn.php (соединение с бд))

Расширенные примеры создания баз данных

Пример 1: PDO с выбором кодировки и проверкой существования

Пример

<?php
$dsn = 'mysql:host=localhost';
$user = 'root';
$pass = '';

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    
    // Проверка существования базы
    $stmt = $pdo->query("SHOW DATABASES LIKE 'my_app_db'");
    if ($stmt->rowCount() == 0) {
        $pdo->exec("CREATE DATABASE `my_app_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
        echo "База my_app_db создана с кодировкой utf8mb4";
    } else {
        echo "База my_app_db уже существует";
    }
} catch (PDOException $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>
База my_app_db создана с кодировкой utf8mb4

Здесь используется запрос SHOW DATABASES для проверки наличия базы. В случае отсутствия выполняется создание с явным указанием кодировки, что важно для поддержки эмодзи и многобайтовых символов.

Пример 2: mysqli объектный стиль с детальным выводом ошибок

Пример

<?php
$mysqli = @new mysqli('localhost', 'root', '', null, 3306);
if ($mysqli->connect_errno) {
    die("Код ошибки: {$mysqli->connect_errno} - {$mysqli->connect_error}");
}

$db_name = 'shop_' . date('Ymd');
$sql = "CREATE DATABASE `$db_name`";
if (!$mysqli->query($sql)) {
    $error = $mysqli->errno . ': ' . $mysqli->error;
    echo "Не удалось создать базу: $error";
} else {
    echo "База $db_name успешно создана";
}
$mysqli->close();
?>
База shop_20250204 успешно создана

Имя базы формируется динамически с текущей датой, что удобно для тестовых стендов. Код ошибки и её описание выводятся для диагностики.

Пример 3: Создание временной базы данных SQLite

Пример

<?php
$db = new PDO('sqlite:/tmp/temp_project.db');
$db->exec("CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY, message TEXT)");
echo "SQLite база создана в временной папке";
?>
SQLite база создана в временной папке

В отличие от MySQL, SQLite не требует отдельной команды создания базы: файл формируется при первом подключении. Этот подход подходит для прототипирования или оффлайн-решений.

Пример 4: Пакетное создание нескольких баз через PDO

Пример

<?php
$databases = ['dev_db', 'test_db', 'staging_db'];
$pdo = new PDO('mysql:host=localhost', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

foreach ($databases as $db) {
    try {
        $pdo->exec("CREATE DATABASE IF NOT EXISTS `$db`");
        echo "База $db обработана\n";
    } catch (PDOException $e) {
        echo "Ошибка для $db: " . $e->getMessage() . "\n";
    }
}
?>
База dev_db обработана
База test_db обработана
База staging_db обработана

Цикл позволяет создать несколько баз за одно выполнение скрипта. Ошибки обрабатываются индивидуально, выполнение не прерывается.

Создание базы данных в PHP - comments

En
создание базы php (php)