2009-09-09 86 views
3

如何在DBI查询中使用变量作为表名称?我知道如何使用占位符作为where子句的一部分,但是如何为表名称执行此操作?如何在DBI查询中使用变量作为表名称?

我愿做这样的事情:

my $table_name='table1'; 
my $query = $dbh_cgi->prepare("select * from ?"); 
$query->execute($table_name); 

到目前为止,我最终得到一个MySQL语法错误,因为DBI增加周围的名字,table1的报价。

回答

13

占位符的局限性之一是它们不能用于表名。您可以使用变量来代替使用占位符。为确保变量的内容安全,请使用quote_identifier(),例如:

my $table_name='table1'; #-- Or get this from somewhere else 
my $safe_table_name = $dbh_cgi->quote_identifier($table_name); 
my $query = $dbh_cgi->prepare("select * from $safe_table_name"); 
$query->execute(); 
相关问题