Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il modo migliore per scegliere il nome di una tabella in modo dinamico in fase di esecuzione?

Non puoi parametrizzare un identificatore (nome della tabella o nome del campo) in MySQL, tuttavia, puoi eseguirne l'escape usando i backtick.

La seguente query verrà eseguita in modo sicuro ma produrrà un errore perché la tabella non esiste (a meno che per qualche strana possibilità tu non abbia effettivamente una tabella denominata in questo modo):

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

Fondamentalmente, puoi usare nomi o campi dinamici purché siano racchiusi in backtick. Per prevenire l'iniezione di SQL in questo modo, tutto ciò che devi fare è prima eliminare tutti i backtick:

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