2009-09-09 88 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(); 
相關問題