sql >> Databasteknik >  >> RDS >> Mysql

MySqlParameter som Tabellnamn

Du kan inte skicka tabellnamn som parameter. Du måste använda dynamisk SQL för att göra detta, så du måste strängkoncentration för att göra det, till exempel

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

Men eftersom användare matar in tabellnamnet, så är SQL-injektion möjlig. Du kan använda denna SQL för att avgöra om den tabellen finns innan du frågar något från den:

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

(Du kan perfekt parametrisera den här frågan, så SQL-injektion kommer att elimineras)

Var i allmänhet försiktig med SQL-injektion. Men om du använder den här interna (inte exponera för användaren), bör SQL-injektion inte vara något problem.

Bättre, du kan konstruera en lagrad procedur för att hantera detta, som i mitt andra svar:

Unified SQL getter med LINQ




  1. UNION ALL Optimering

  2. user postgres lanserar en process som tar alla processorer till 100 % användning

  3. Tidszonkonvertering i SQL-fråga

  4. php:SQLSTATE[HY000] [2002] Ingen anslutning kunde göras eftersom måldatorn aktivt vägrade det