“クエリパラメータ”とはC ++で?
-
08-07-2019 - |
質問
文字列ストリームを使用して、C ++で選択クエリを準備していました。ただし、stringstreamの使用を避けるために、クエリパラメータを使用してdb2 sqlクエリを送信することを強くお勧めします。誰でもC ++のクエリパラメータの正確な意味を共有できますか?また、実用的なサンプルコードスニペットを共有します。
ヘルプを事前に感謝します。
編集:文字列ストリームであり、strstreamではありません。
ありがとう、 マシュー・リジュ
解決
これは文字列でクエリを構築するのではなく、一般にパラメータ化されたクエリを指していると思われます。SQL変数(またはパラメータ)を提供し、それらの変数を個別に渡します。これらは、SQLインジェクション攻撃を処理するためにはるかに優れています。例で説明するには:
"SELECT * FROM Customers WHERE CustomerId = " + _customerId;
悪いことですが、これ:
"SELECT * FROM Customers where CustomerId = @CustomerId"
は良いです。キャッチは、クエリオブジェクトにパラメーターを追加する必要があることです(これがC ++でどのように行われるかわかりません。
他の質問への参照:
- https://stackoverflow.com/questions / 1973 / what-is-the-best-way-to-avoid-sql-injection-attacks
- ストアドプロシージャとパラメーター化されたクエリ
ワイルドワイルドウェブ:
他のヒント
パラメータ化されたクエリ形式のSQLクエリは、SQLインジェクション攻撃を回避するために、文字列形式より安全です。 パラメータ化されたクエリの例
StringBuilder sqlstr = new StringBuilder();
cmd.Parameters.AddWithValue("@companyid", CompanyID);
sqlstr.Append("SELECT evtconfigurationId, companyid,
configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");
クエリ文字列形式の例
StringBuilder sqlstr = new StringBuilder();
sqlstr.Append("SELECT evtconfigurationId, companyid, configname,
configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" + CompanyID);
所属していません StackOverflow