Perl - если таблица не существует - PullRequest
2 голосов
/ 22 сентября 2010

В настоящее время я использую следующее, которое работает, но выдает ошибку каждый раз, когда создается таблица (поскольку она сначала пытается вставить в БД, которая не существует, и возвращает false).

$result = $dbh->prepare("INSERT INTO `". $host ."` (URL) VALUES ('$href')");
if( ! $result->execute() ){
    $result = $dbh->prepare("CREATE TABLE `" . $host . "` ( `ID` INT( 255 ) NOT NULL AUTO_INCREMENT , `URL` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `ID` )) ENGINE = MYISAM ;");
    $result->execute();
    print "Host added: " . $host . "\n";
}

Может ли кто-нибудь сообщить мне о более эффективном способе выполнения этой задачи?

РЕДАКТИРОВАТЬ - Bind

$result = $dbh->prepare("CREATE TABLE `?` If NOT EXISTS ( `ID` INT( 255 ) NOT NULL AUTO_INCREMENT , `URL` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `ID` )) ENGINE = MYISAM ;");
            $result->execute($host);
            $result = $dbh->prepare("INSERT INTO `?` (URL) VALUES ('?')");
            $result->execute($host, $href);
            print "Host added: " . $host . "\n";

это правильно?

Ответы [ 4 ]

5 голосов
/ 22 сентября 2010
CREATE TABLE Foo if NOT EXISTS  <schema>

Также, пожалуйста, используйте заполнители и значения привязки в операциях INSERT, чтобы вас не называли Маленькие таблицы Бобби .

0 голосов
/ 22 сентября 2010

Если вы ожидаете, что таблица будет существовать чаще, чем нет, существующий код будет наиболее эффективным способом.Обратите внимание, что вы можете переопределить PrintError и RaiseError (предполагая, что один из них означает «выбрасывает ошибку») для данного дескриптора оператора.

0 голосов
/ 22 сентября 2010

Это веб-приложение? Если это так, я настоятельно рекомендую не использовать пользователя / пароль, у которого есть права на изменение структуры базы данных. Более типичным способом будет иметь установочный скрипт, который создает таблицы заранее.

0 голосов
/ 22 сентября 2010

Попробуйте:

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