Wie kann ich in einer DBI-Abfrage eine Variable für den Namen einer Tabelle verwenden?

StackOverflow https://stackoverflow.com/questions/1400848

  •  05-07-2019
  •  | 
  •  

Frage

Wie kann ich mit einer Variable für den Namen einer Tabelle in einer DBI-Abfrage? Ich weiß, wie Platzhalter als Teil der Where-Klausel zu verwenden, aber wie mache ich dies für die Tabellennamen?

Ich möchte etwas tun:

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

Bisher habe ich am Ende eine MySQL-Syntax-Fehler bekommen, weil DBI Anführungszeichen um den Namen ergänzt tabelle1.

War es hilfreich?

Lösung

Eine der Einschränkungen des Platzhalter ist, dass sie nicht für Tabellennamen verwendet werden. Statt einen Platzhalter verwenden, können Sie eine Variable verwenden. Um sicherzustellen, dass die Variableninhalte sicher sind, verwenden Sie quote_identifier(), zum Beispiel:

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top