2009-09-09 9 views
3

Comment utiliser une variable pour le nom d'une table dans une requête DBI? Je sais comment utiliser des espaces réservés dans le cadre de la clause where, mais comment faire pour le nom de la table?Comment utiliser une variable pour le nom d'une table dans une requête DBI?

Je voudrais faire quelque chose comme ceci:

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

, je finis Jusqu'à présent, jusqu'à obtenir une erreur de syntaxe MySQL car DBI ajoute des guillemets autour du nom, table1.

Répondre

13

L'une des limitations des espaces réservés est qu'ils ne peuvent pas être utilisés pour les noms de tables. Au lieu d'utiliser un espace réservé, vous pouvez utiliser une variable. Pour vous assurer que le contenu de la variable est sûr, utilisez quote_identifier(), par exemple:

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(); 
Questions connexes