php - mysqli - создать базу данных, если она не существует - PullRequest
0 голосов
/ 19 апреля 2019

Я использую PHP и mysqli и пытаюсь создать БД, если ее нет в моем файле dbLogin. Похоже, это должно быть довольно просто. Кажется, он зависает при первой попытке создания с ошибкой и не может пройти мимо или поймать ошибку.

Вот мой очень простой код:

    <?php

    $con = '';

    try {
        $con = new mysqli("host", "user", "pass", "db");
    }
    catch(Exception $e) {
        echo "Error: $e<br />";
        $con = new mysqli("host", "user", "pass");
        $con->query("CREATE DATABASE IF NOT EXISTS db;");
    }
    /* check connection */
    if ($con->connect_errno) {
        printf("Connect failed: %s\n", $con->connect_error);
        exit();
    }

?>

Теперь, когда я запускаю приведенный выше код, все, что я получаю, это следующая ошибка:

Предупреждение: mysqli :: __ construct (): (HY000 / 1049): неизвестная база данных 'db' в xyz \ DBLogin.php в строке 6 Connect ошибка: неизвестная база данных 'db'

Строка 6 - это строка внутри блока try. Он не создает базу данных и не перемещается после ошибки.

1 Ответ

2 голосов
/ 19 апреля 2019

Ваша проблема в том, что mysqli::__construct генерирует предупреждение, только если не может подключиться к базе данных, и вы не можете напрямую перехватить предупреждение.Теперь вы можете обойти это (например, см. этот вопрос ), но, вероятно, проще сделать что-то вроде этого:

$con = new mysqli("host", "user", "pass");
if ($con->connect_errno) {
    printf("Connect failed: %s\n", $con->connect_error);
    exit();
}
if (!$con->select_db('db')) {
    echo "Couldn't select database: " . $con->error;
    if (!$con->query("CREATE DATABASE IF NOT EXISTS db;")) {
        echo "Couldn't create database: " . $con->error;
    }
    $con->select_db('db');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...