2

tableName をクエリに渡すために使用したいMySqlParameter(slq インジェクションを防ぐため)

MySqlCommand cmd = new MySqlCommand("select * from @table"), cn)
cmd.Parameters.AddWithValue("@table",TableName);

しかし、これは機能していません。パラメータとしてtableNameを渡すにはどうすればよいですか

PSに変更しようとし@ました?-機能していません

4

1 に答える 1

5

テーブル名をパラメータとして渡すことはできません。これを行うには動的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インジェクションは問題になりません。

私の別の答えのように、これを処理するためのストアドプロシージャを構築することもできます。

LINQを使用した統合SQLゲッター

于 2011-05-18T07:58:41.920 に答える