Mysql
 sql >> база данни >  >> RDS >> Mysql

MySqlParameter като TableName

Не можете да подадете името на таблицата като параметър. Трябва да използвате динамичен SQL, за да направите това, така че трябва да зададете концентрация на низ, за ​​да го направите, например

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

Но тъй като потребителите въвеждат tableName, така че SQL инжекцията е възможна. Можете да използвате този SQL, за да определите дали тази таблица съществува, преди да поискате нещо от нея:

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

(Можете перфектно да параметризирате тази заявка, така че SQL инжекцията ще бъде елиминирана)

Като цяло, внимавайте с SQL инжектирането. Но ако използвате това вътрешно (не се излага на потребителя), тогава SQL инжекцията не би трябвало да е проблем.

По-добре, можете да създадете съхранена процедура, за да се справите с това, както е в моя друг отговор:

Обединен SQL getter с LINQ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Персонализирана ORDER BY за игнориране на 'the'

  2. Как мога да променя MariaDB на MySQL в XAMPP?

  3. SELECT от MySQL изглед с клауза HAVING връща празен набор от резултати

  4. Как да получите стойности, разделени със запетая, от базата данни

  5. Заменете нулевите стойности по подразбиране, върнати от лявото външно свързване