如何在DBI查询中使用变量作为表的名称?我知道如何使用占位符作为where子句的一部分,但是如何为表名执行此操作?
我想做这样的事情:
my $table_name='table1';
my $query = $dbh_cgi->prepare("select * from ?");
$query->execute($table_name);
到目前为止,我最终得到了MySQL语法错误,因为DBI在名称table1周围添加了引号。
答案 0 :(得分: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();