0

このコードを入手しました。SQL インジェクションを防止したいのです...

MySqlCommand command = new MySqlCommand("Update Cliente set blacklist='true' WHERE ID ='" + txtid.Text +"'", mConn);
command.ExecuteNonQuery();

私はこれをやろうとしました:

            MySqlCommand command = new MySqlCommand("Update Cliente set blacklist=@bl WHERE ID ='" + "@id" + "'", mConn);
            command.Parameters.AddWithValue("@id", txtid.Text);
            command.Parameters.AddWithValue("@bl", 1);
            command.ExecuteNonQuery();

blacklist は bool であるため、1 = true です。エラーは発生しませんが、機能していません。次のように機能するはずです。

フィールドを持つフォームがあり、Cliente テーブルに存在する ID を入力し、ボタンをクリックすると、ブラックリスト フィールドが「true」に更新されます。ここで、ID はテキスト ボックスに入力したものと同じです。

4

2 に答える 2

2

これを変える:

MySqlCommand command = 
  new MySqlCommand("Update Cliente set blacklist=@bl WHERE ID ='" + "@id" + "'", 
                   mConn);

これに:

MySqlCommand command = 
  new MySqlCommand("Update Cliente set blacklist=@bl WHERE ID =@id", 
                   mConn);

SQL コードでパラメーターを引用符で囲む必要はありません。パラメーターを使用するポイントは、DB エンジンがデータ置換を処理できるようにすることです。

于 2013-05-17T14:47:26.027 に答える
0

2 番目のパラメーターは、一重引用符で囲んでいるため機能しません。パラメータを囲む一重引用符を削除すると、機能します。パラメータは識別子であり、文字列リテラルではないことに注意してください。

UPDATE Cliente SET blacklist = @bl WHERE ID = @id
于 2013-05-17T14:47:56.230 に答える