問題タブ [prepared-statement]
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.
php - MySQL で準備されたクエリは、セッションごとに 1 回のクエリのパフォーマンス上の利点を提供しますか?
ドキュメントによると、準備されたクエリは、クエリを解析する MySQL サーバーのオーバーヘッドが 1 回しか発生しないため、クエリを複数回実行している場合にパフォーマンスが大幅に向上します。そこでの「複数回」とは正確にはどういう意味なのか疑問に思っています。
つまり、クエリを 1 回実行する Web ページがあるとします。ここで、そのページが毎秒 50 回呼び出されるとします。パフォーマンスの観点から、クエリを prepare() する方が理にかなっていますか (したがって、DB サーバーへの 2 回のラウンドトリップが必要です。1 回はクエリの準備に、もう 1 回はクエリの実行に必要です)、またはクエリを通常どおりに送信するだけです (1 回のラウンドトリップのみが必要です)。 ? MySQL および/または PHP mysqli ドライバーは、以前の呼び出しでクエリがいつ prepare() されたかを認識するのに十分スマートですか?
php - 可変サイズの変数リストを持つ MySQL プリペアド ステートメント
毎回異なる数の引数を取る準備済みの MySQL ステートメントを PHP でどのように記述しますか? このようなクエリの例は次のとおりです。
IN
句は、実行されるたびに異なる数の s を持ちますid
。
考えられる解決策は 2 つありますが、より良い方法があるかどうかを確認したいと考えています。
考えられる解決策 1ステートメントに 100 個の変数を受け入れさせ、残りをテーブルにないことが保証されたダミー値で埋めます。100 を超える値に対して複数の呼び出しを行います。
考えられる解決策 2準備済みステートメントを使用しないでください。インジェクション攻撃の可能性を厳密にチェックするクエリを作成して実行します。
java - Java PreparedStatements のワイルドカード
これが私の現在のSQLステートメントです:
アルバムまたはアーティスト名に完全に一致するものを返しますが、それ以外のものは返しません。ステートメントで「%」を使用できないか、エラーが発生します。
プリペアド ステートメントにワイルドカードを追加するにはどうすればよいですか?
(私は Java5 と MySQL を使用しています)
ありがとう!
.net - DBType のない AddWithValue により、クエリの実行が遅くなる
私は cmd.Parameters.AddWithValue を使用しており、クエリを実行するために DBType (int、varchar、...) を指定していません。SQL プロファイラーを調べたところ、このメソッドで実行されたクエリは、データ型を指定した場合よりもはるかに遅くなるようです。
どれほど遅いかを示すために、例を示します。クエリは 1 つのテーブルに対する単純な検索であり、where ステートメントの列にはインデックスが付けられます。データ型を指定すると、特定のクエリが約 0 MS (SQL サーバーで測定するには小さすぎる) で実行され、41 回の読み取りが必要になります。DBType を削除すると、約 200 ミリ秒かかり、クエリが完了するまでに 10000 回の読み取りが発生します。
SQLプロファイラーが値を誤って報告しているだけなのか、これらの値が実際に正しいのかはわかりませんが、DBTypeを追加および削除できるという点で再現可能であり、SQLプロファイラーで指定された値が生成されます.
他の誰かがこの問題に遭遇し、それを修正する簡単な方法がありますか. コード全体にデータ型を追加できることはわかっていますが、それは追加するものがたくさんあるように思えます。それを修正する簡単な方法があれば、それは大歓迎です。
[編集]
いくつかの初期テスト (両方のシナリオをループで実行) の後、プロファイラーが提供する値は正確であるように見えます。
追加情報として、Windows XP Pro で .Net 2.0 を実行し、DB 用に Windows 2000 で SQL Server 2000 を実行しています。
[アップデート]
掘り下げた後、関連する可能性のあるこのブログ投稿を見つけることができました。.Net の文字列値 (Unicode であるため) は、nvarchar パラメータとして自動的に作成されるようです。この問題を解決するために何かできるかどうかを確認するために、仕事に入る月曜日まで待つ必要があります。それでも、私が避けようとしていたデータ型を設定する必要があるようです。
この問題は、私が行ったすべてのクエリで発生するわけではなく、いくつかを選択しただけなので、問題のあるクエリで DBType を設定することに頼るかもしれませんが、問題に対するより一般的な解決策を探しています。
java - Java: 文字列から日付オブジェクトを作成し、MySQL に挿入する
Javaで日付/時刻を処理する必要があるときはいつでも、私は悲しくなります
文字列を解析し、それを日付オブジェクトに変換して、preparepared ステートメントに挿入しようとしています。私はこれを機能させようとしてきましたが、運がありません。クラスをコンパイルしようとすると、役立つエラー メッセージも表示されます。
「スレッド「メイン」の例外 java.lang.Error: 未解決のコンパイルの問題: タイプ PreparedStatement のメソッド setDate(int, Date) は、引数 (int, Date) には適用できません」
ええと?
これが問題のコードです。
php - mysqli 準備済みステートメントでの null の使用
mysqli のプリペアド ステートメントでは、NULL は '' (文字列の場合) または 0 (整数の場合) に変換されます。真のNULLとして保存したいと思います。これを行う方法はありますか?
java - PreparedStatements をネストするためのベスト プラクティスは何ですか?
レガシーSQLステートメントのセクションが依存関係に基づいているいくつかのインスタンスがあります。例えば。
このレガシー コードから PreparedStatements を作成しています。ここでのベストプラクティスは何ですか。var SQL 用の PreparedStatement を作成し、それを SQL2 内にネストする必要がありますか? ネストせずに SQL2 に基づく複数の PreparedStatement が存在する必要がありますか、それともまったく異なるものですか?
SQL var は多くの長く複雑な SQL クエリ内で再利用されるため、コードは例よりもはるかに複雑です。
編集: プロジェクトの設計では PreparedStatements を使用する必要があります。現時点では、ライブラリを使用する選択肢はありません。
java - JavaでSQLクエリを準備するときに整数のリストを設定する方法
私はこのようなクエリを持っています-select*from tbl where ... and colname in(2,3,4)
JavaでPreparedStatementを使用してクエリ(...'colname in(?)')を準備する場合、これらの整数を設定するためにどのセッターメソッドを呼び出す必要がありますか?整数はint配列で使用でき、サイズは異なります。重要な場合、データベースはMySQLであり、問題の列はint型です。
java - Java でのすべてのデータベース挿入に PreparedStatements を使用する必要がありますか?
Javaで変数をデータベースに挿入する前に変数をエスケープするための推奨される方法は何ですか?
私が理解しているように、データをエスケープするために PreparedStatement.setString() を使用できますが、同じクエリを二度と実行する予定がない場合、PreparedStatement はやや非現実的です..すべてのクエリを準備せずに実行するより良い方法はありますか?
java - Java の PreparedStatement はどのように機能しますか?
PreparedStatement
パフォーマンスを向上させるために、繰り返し実行される Statement オブジェクトをオブジェクトに置き換えることを計画しています。MySQL 関数now()
や文字列変数などの引数を使用しています。
私が見たほとんどのクエリには、クエリで使用される引数としてPreparedStatement
定数値 ( 10
、および などの文字列) が含まれていました。や変数などの関数を引数として使用するにはどうすればよいですか? 実際の値の代わりにクエリで sを使用する必要がありますか? 私はかなり当惑しています。"New York"
?
now()
?