3

DBI クエリでテーブルの名前に変数を使用するにはどうすればよいですか? where 句の一部としてプレースホルダーを使用する方法は知っていますが、テーブル名に対してこれを行うにはどうすればよいですか?

私はこのようなことをしたいと思います:

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

これまでのところ、DBI が table1 という名前の周りに引用符を追加するため、MySQL 構文エラーが発生します。

4

1 に答える 1

13

プレースホルダーの制限の 1 つは、テーブル名に使用できないことです。プレースホルダーを使用する代わりに、変数を使用できます。変数の内容が安全であることを確認するには、次のように使用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();
于 2009-09-09T17:07:48.757 に答える