2013-02-10 4 views
1

Итак, я новичок в PDO и просто пытаюсь обойти его. У меня есть следующий код:Проверка создания таблицы MySQL - PDO

$sql = $conn->prepare(' 

CREATE TABLE IF NOT EXISTS `users` ( 
`UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`Username` VARCHAR(65) NOT NULL , 
`Password` VARCHAR(32) NOT NULL , 
`EmailAddress` VARCHAR(255) NOT NULL, 
`Name` VARCHAR(50) NOT NULL) '); 

$sql->execute(); 

Есть ли способ узнать, если таблица была создана успешно или, если он уже существует, и поэтому не было выполнено?

Я знаю, что вы можете проверить -> execute() для истинного или ложного значения, но в этом случае не всегда будет верно, была ли таблица уже или нет?

+0

Вы можете удалить 'IF NOT EXISTS' и поймать исключение. –

ответ

4

Нет. Это именно то, что нужно для IF NOT EXISTS - ничего не делать, если таблица уже существует, без возникновения ошибки.

Решение, по-видимому, слишком очевидно, чтобы видеть: Просто оставьте IF NOT EXISTS. Если таблица существует, оператор вызывает исключение (в зависимости от конфигурации), которое вы можете поймать.

+0

Было несколько надежд сделать его немного опрятным, например, если он уже существует, они получают простое однострочное сообщение «Таблица уже существует», а если нет, и он добавляется, они получают «Таблица добавлена». Причина в том, как я это делаю, он говорит, что «Таблица добавлена», даже если она уже существует, и если я удалю часть «ЕСЛИ НЕ СУЩЕСТВУЮЩИХ», тогда она вызывает ужасную нагрузку ошибки, а не просто хорошая простая ошибка в одной строке. Любой способ достичь этого? – Tenatious

0

Работали это:

try { 

    $sql = $conn->prepare(' 
     CREATE TABLE `users` ( 
     `UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
     `Username` VARCHAR(65) NOT NULL , 
     `Password` VARCHAR(32) NOT NULL , 
     `EmailAddress` VARCHAR(255) NOT NULL, 
     `Name` VARCHAR(50) NOT NULL, 
     `Rank` INT(1) NOT NULL DEFAULT 0) 
     '); 

     $sql->execute(); 

     echo "Table 'users' added to the database"; 

} catch(PDOException $ex) { 
    $errors = $sql->errorInfo(); 
    echo($errors[2]); 
} 
Смежные вопросы