sql >> Databáze >  >> RDS >> Mysql

MySqlParameter jako název_tabulky

Nemůžete předat název tabulky jako parametr. K tomu musíte použít dynamické SQL, takže k tomu musíte koncentraci řetězců, například

  MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)

Ale protože uživatelé zadávají název_tabulky, je možné vložení SQL. Tento SQL můžete použít k určení, zda daná tabulka existuje, než z ní na něco zadáte dotaz:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';

(Tento dotaz můžete perfektně parametrizovat, takže SQL injection odpadá)

Obecně si dávejte pozor na SQL injection. Ale pokud používáte toto interní (nevystavujete se uživateli), pak by SQL injection neměl být problém.

Lépe, můžete vytvořit uloženou proceduru, která se s tím vypořádá, jako v mé další odpovědi:

Unified SQL getter s LINQ




  1. Řešení problémů generátoru číselných řad – 3. část

  2. Dotaz MYSQL / data starší než 1 týden (všechna data a časy v UTC)

  3. Spring Batch - Nelze vytvořit tabulky metadat na Postgres a načíst aktuální data do mysql

  4. hierarchie stromu objednávky SQL