Как использовать переменную для имени таблицы в запросе DBI? - PullRequest
3 голосов
/ 09 сентября 2009

Как использовать переменную для имени таблицы в запросе DBI? Я знаю, как использовать заполнители как часть предложения where, но как мне это сделать для имени таблицы?

Я бы хотел сделать что-то вроде этого:

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

Пока что я получаю синтаксическую ошибку MySQL, потому что DBI добавляет кавычки вокруг имени, table1.

1 Ответ

13 голосов
/ 09 сентября 2009

Одним из ограничений заполнителей является то, что они не могут использоваться для имен таблиц. Вместо использования заполнителя вы можете использовать переменную. Чтобы убедиться в безопасности содержимого переменной, используйте 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();
...