Perl - 如果表不存在

时间:2010-09-21 20:27:18

标签: mysql perl

我目前正在使用以下工作,但每次创建表时都会抛出错误(因为它首先尝试插入不存在的db并返回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";
}

有人能告诉我更有效的方法来完成这项任务吗?

编辑 - 绑定

$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 个答案:

答案 0 :(得分:5)

CREATE TABLE Foo if NOT EXISTS  <schema>

另外,请在INSERT操作中使用占位符和绑定值,以免被称为Little Bobby Tables

答案 1 :(得分:0)

尝试:

CREATE TABLE tblname IF NOT EXISTS ...

答案 2 :(得分:0)

这是一个网络应用程序吗?如果是这样,我强烈建议不要使用有权更改数据库结构的用户/传递。更典型的方法是使用安装程序脚本预先创建表。

答案 3 :(得分:0)

如果您希望表格经常存在,那么现有代码最有效的方式。请注意,您可以覆盖PrintError和RaiseError(假设其中一个是“抛出错误”的意思)给定的语句句柄。