問題タブ [sql-parametrized-query]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - パラメータ化された SQL クエリを作成するにはどうすればよいですか? どして私がこんな事に?
「誰もが」パラメータ化された SQL クエリを使用して、ユーザー入力のすべての部分を検証することなく、SQL インジェクション攻撃から保護していると聞いています。
これどうやってやるの?ストアド プロシージャを使用する場合、これは自動的に取得されますか?
したがって、これはパラメータ化されていないという私の理解:
これはパラメータ化されますか?
または、SQL インジェクションから身を守るために、このようなより広範なことを行う必要がありますか?
セキュリティ上の考慮事項以外に、パラメーター化されたクエリを使用する利点はありますか?
更新: この素晴らしい記事は、Grotok による質問の参照の 1 つにリンクされていました。 http://www.sommarskog.se/dynamic_sql.html
python - Python MYSQL 更新ステートメント
このPython MYSQL更新ステートメントを正しく取得しようとしています(変数あり):
私が間違っているアイデアはありますか?
php - PDOを使用したPHPで、最終的なSQLパラメータ化されたクエリを確認する方法は?
PHP で、パラメータ化されたクエリを使用して PDO を使用して MySQL データベースにアクセスする場合、(すべてのトークンを置き換えた後) 最終的なクエリを確認するにはどうすればよいですか?
データベースによって実際に何が実行されるかを確認する方法はありますか?
sql - パラメータ化されたクエリを使用して、クエリ文字列に値を追加するよりも速くデータをテーブルに挿入するのはなぜですか?
パラメータ化されたクエリを使用してデータをテーブルに挿入するのはなぜですか。
クエリ文字列に値を追加するよりも高速です。
?
このコマンドをループで使用して10K行を挿入すると、パラメーター化されたクエリは他のクエリよりも桁違いに高速になります。
パラメータ化されたクエリにはセキュリティと保守性の利点があることを知っています。これが推奨される使用方法ですが、なぜこれほど高速なのかについての説明に興味があります。
devart - パラメータ化されたクエリに関するDevartOracleプロバイダーのダイレクトモードの問題
ダイレクトモードでのパラメータ化されたクエリでいくつかの奇妙な問題が発生しています。
基本的に、すでに一意の行が含まれているテーブルで挿入を実行すると、予期される挿入例外が発生します。挿入例外の後、私はこれと同じ接続を使用して、データがすでにロックダウンされている情報を取得し、ユーザーを報告します(この時点では接続はまだ良好です)。その後、この接続は閉じられ、プールに戻されます。これは、予想どおり、この時点まではすべて問題ありません。
後でこの接続がプールから取得されたときに、単純な更新パラメーター化照会を実行しようとすると、次の例外が発生します。ORA-01008:すべての変数がバインドされていません。これは、すべての変数がバインドされていないかどうかを確認するのに意味がありますが、OracleParameterコレクションを見ると、すべてのパラメーターが存在し、それらの値が正しいことがはっきりとわかります。言うまでもなく、このクエリは、クライアントリクエストごとに更新される一般的な更新テーブルであるため、この接続がプール内の他の接続のためにプールから取得される前に複数回実行されます。さらに、このコードはすべて、Oracleクライアントを使用してダイレクトモードをオフにすると正常に機能します(ダイレクトモードとまったく同じコードとクエリの実行)。
基本的に、直接モードで挿入が実行されて失敗し、接続が閉じられてプールに戻されると、何らかの理由で接続が破損し、パラメーター化されたクエリで再度使用すると失敗するようです。
唯一の問題は、この問題が単純なケースで確実に再現できないことであるということを除いて、単純なサンプルを作成します。
情報:
- これはクライアントサーバーアプリです。単一のクライアントでも問題が発生します。
- 接続は、クライアント要求ごとに作成されてプールから取得され、要求の実行後に閉じられます。
- 各接続は単一のスレッド内で使用されます(複数のスレッド間では使用されません)
- 最新のDevart.Data.Oracle5.35.54とDevart.Data5.0.16を使用して、以前のバージョンでも同じ結果を試しました。
誰かがこれに出くわしたか、何かアイデアを持っているなら、あなたの助けは大いに感謝されます
ありがとう
python - MySQLクエリでデータベース名をパラメータ化する安全な方法はありますか?
私は、私の個人的なプロジェクトの mysql データベースと関連するアカウントの作成を自動化するのに役立つ小さな python スクリプトを書いています。このスクリプトの一部は、データベース名を文字列として受け取り、データベースを作成する関数です。
次のように、 MySQL の CREATE DATABASEが引用符で囲まれていないデータベースの名前を要求するため、これは機能しません。
しかし、ユーザーが提供したデータベース名をクエリに安全に挿入しようとする私のコードは次を作成します:
そして、「テストに近い MySQL 構文に問題があります」というメッセージが表示されます。
これは個人的な使用のためのものですが、ユーザーが提供した文字列をあらゆる種類のクエリに直接挿入したくありません。それは私の宗教に反しています。ユーザーが指定したデータベース名を python (または任意の言語) の mySQL クエリに挿入して、ユーザー入力test_db; DROP some_other_db;
が拒否または正しくエスケープされることを確認する安全な方法はありますか?
c# - C#のデータアクセス層からSQLパラメータを追加する際の問題
まず、2つの方法の例を示します
そして別の方法は
コメントアウトしました
ここで、caps項は、上記のクラスのようなすべての定数です。
SELECTも正しく定義されています。私はこのレイヤーを完璧に使用しています。しかし今、私が何をすべきか混乱しているシナリオが発生しました。これまで、1対1の関係を持つパラメーターを使用して値を追加してきました。しかし、2番目の方法では、2つの値が1つのパラメーターを参照している間演算子を使用しています。これを正しく機能させるために、ここに何を記述しますか。変更したい特定の地域をコメントアウトしました。できれば助けてください。これがメソッドGetSQLParameterspublicstatic List GetSQLParameters(DAOParameters dps){List parameters = new List();です。
sql - 複数のパラメーターで結果を返す SQL ストアド プロシージャ
「類似レコード」の検索結果を返すストアド プロシージャを作成したいと考えています。私が現在持っているストアドプロシージャは次のとおりです
私が抱えている問題は、実行時に戻り値 0 が返され、結果の行が表示されないことです (SQL Server Management Studio)。
params に正しい値を渡していることと、複数のレコードが存在することを確認できます。
これは、実行時の execute ステートメントです。
c# - C#でパラメーター化されたクエリを使用してデータを表示できません
パラメータ化されたクエリを使用してデータを表示しようとしています
どうすれば動作させることができますか?