PDO -> if (таблица существует) - PullRequest
0 голосов
/ 05 июня 2018
try {
    $query = $pdo->query("SELECT 1 FROM `classes` LIMIT 1");
} catch (Exception $e) {
    $query = $pdo->prepare("CREATE TABLE `classes`(
    `ID_class` int(11) AUTO_INCREMENT,
    `name` varchar(255),
    PRIMARY KEY(`ID_class`))");

    $query->execute();
}

Привет.

Не перехватывается, если таблица не существует.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

У меня сработало, когда для PDO ATT_ERRMODE установлено значение ERRMODE_EXCEPTION.

$user = 'test';
$pass = 'test';
$opt  = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];

$db   = new PDO('mysql:host=localhost;dbname=test;charset=utf8' ,
                                    $user ,
                                    $pass ,
                                    $opt
                                    );


try {
    $query = $db->query("SELECT 1 FROM `classes` LIMIT 1");
} catch (Exception $e) {
    $query = $db->prepare("CREATE TABLE `classes`(
    `ID_class` int(11) AUTO_INCREMENT,
    `name` varchar(255),
    PRIMARY KEY(`ID_class`))");

    $query->execute();
}
0 голосов
/ 05 июня 2018

Это не сработает, потому что, согласно документации PHP (php.net) :

Возвращаемые значения

PDO:: query () возвращает объект PDOStatement или FALSE в случае сбоя.

Так что вам нужно либо проверить, возвращает ли $pdo->query("SELECT 1 FROM 'classes' LIMIT 1") false, либо альтернативный тип проверка существования таблицы без использования команды «Выбрать из» (stackoverflow.com) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...