Mysql Perl-If表不存在

Mysql Perl-If表不存在,mysql,perl,Mysql,Perl,我目前正在使用下面的方法,但每次创建表时都会抛出一个错误(因为它首先尝试插入到一个不存在的数据库中,并返回false) 有人能告诉我一种更有效的方法来完成这项任务吗 编辑绑定 $result = $dbh->prepare("CREATE TABLE `?` If NOT EXISTS ( `ID` INT( 255 ) NOT NULL AUTO_INCREMENT , `URL` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `ID` )) ENGIN

我目前正在使用下面的方法,但每次创建表时都会抛出一个错误(因为它首先尝试插入到一个不存在的数据库中,并返回false)

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

编辑绑定

$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";
这是否正确?

如果不存在表Foo,则创建表Foo
CREATE TABLE Foo if NOT EXISTS  <schema>
另外,请在插入操作中使用占位符和绑定值,以免被称为。请尝试:

CREATE TABLE tblname IF NOT EXISTS ...

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

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

关于这个“绑定”问题,您可以检查问题中的编辑是否正确吗?实际上,您不能对表名使用占位符(对于大多数驱动程序),因此,编辑的代码将失败。@CanSpice:它肯定会变化。MySQL在某些情况下允许对标识符使用预先准备好的语句,但通常只有当您先牺牲一只鸡并咕哝正确的咒语时,才允许使用预先准备好的语句。例如,请参阅中的邪恶技巧。@Phil:表名占位符的另一种替代方法是使用DBI中的
quote\u identifier
函数--
$dbh->prepare(“创建表”。$dbh->quote_identifier($host)。“如果不存在…”
为什么不在一个表中实现它,主机是一个可以过滤的列名?@Phil如果您不知道它们将被调用,您的数据库设计将被破坏:)
CREATE TABLE tblname IF NOT EXISTS ...