簡體   English   中英

Perl-如果表不存在

[英]Perl - If table does not exist

我目前正在使用以下方法,該方法可以正常工作,但每次創建表時都會引發錯誤(因為它首先嘗試插入不存在的數據庫中並返回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";

這個對嗎?

CREATE TABLE Foo if NOT EXISTS  <schema>

另外,請在INSERT操作中使用占位符並綁定值,以免被稱為Little Bobby Tables

嘗試:

CREATE TABLE tblname IF NOT EXISTS ...

這是一個網絡應用程序嗎? 如果是這樣,我強烈建議您不要使用有權更改數據庫結構的用戶/密碼。 一種更典型的方法是使用一個安裝程序腳本來預先創建表。

如果您希望表經常存在,那么現有代碼最有效的方法。 請注意,對於給定的語句句柄,可以覆蓋PrintError和RaiseError(假設其中之一是“引發錯誤”的意思)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM