Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der beste Weg, um einen Tabellennamen zur Laufzeit dynamisch auszuwählen?

Sie können einen Identifikator nicht parametrisieren (Tabellenname oder Feldname) in MySQL, Sie können sie jedoch mit Backticks maskieren.

Die folgende Abfrage wird sicher ausgeführt, erzeugt jedoch einen Fehler, da die Tabelle nicht existiert (es sei denn, Sie haben zufällig eine Tabelle mit diesem Namen):

SELECT * FROM `users; DROP TABLE users;`;

Grundsätzlich können Sie dynamische Namen oder Felder verwenden, solange sie in Backticks eingeschlossen sind. Um eine SQL-Injection auf diese Weise zu verhindern, müssen Sie lediglich alle Backticks entfernen:

tableName = tableName.Replace("`", "");
string commandText = "SELECT COUNT(*) FROM `" + tableName + "`";