私はWebmatrixのデータベースアプリケーションに取り組んでいます。私は、データベースのレコードを更新するはずのcshtmlファイルを持っています。私はSQLコマンドの文字列連結を使用するとすべて正常に動作しますが、私はそれが安全でないことを知っています。ですから、私は代わりにパラメータを使用しようとしています。しかし、私はSQLパースエラーを取得します。パラメータを使用するとSQL解析エラーが発生するのはなぜですか?
作品:
@{
string dbName = Request["db"];
string tble = Request["t"];
string idName = Request["idn"];
string id = Request["id"];
string field = Request["f"];
string value = Request["v"];
var db = Database.Open(dbName);
var result = db.Execute("UPDATE ["+tble+"] SET ["+field+"]='"+value+"' WHERE ["+idName+"]='"+id+"'");
<text>Result: @result</text>
}
エラーが発生します。それは潜在的なSQLインジェクション攻撃が可能になるので、
@{
string dbName = Request["db"];
string tble = Request["t"];
string idName = Request["idn"];
string id = Request["id"];
string field = Request["f"];
string value = Request["v"];
var db = Database.Open(dbName);
var result = db.Execute("UPDATE @0 SET @[email protected] WHERE @[email protected]",tble,field,value,idName,id);
@*var result = db.Execute("UPDATE ["+tble+"] SET ["+field+"]='"+value+"' WHERE ["+idName+"]='"+id+"'");*@
<text>Result: @result</text>
}
テーブルとカラム名は – Nino
はこれをしないでくださいパラメータとして渡すことはできません!クエリとは、自分でコミットする場所です。あなたの質問は、花嫁を選ぶ前に結婚式を予約することと同等のプログラミングに相当します(または、新郎は習慣に入る必要があります)。 – bbsimonbb
テーブル名とカラム名をパラメータ化することは、通常、壊れたデータモデルの兆候です。 * one *テーブルの* one *カラムに格納されるべきである同じ "タイプ"のデータは、代わりに複数のテーブルとカラムに分散されています。多くの場合、データが分散されているため(クエリや繰り返し条件で多くのテーブルや列に名前を付ける必要があります)、いくつかの* data *が埋め込まれているため、このデータに対してクエリを書くことが必要な場合がありますデータとしてモデル化されていなければならないときは、これらの表と列の*名前*に変換します。 –