問題タブ [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.
java - prepareStatement select を使用しながらデータベースを更新する
を使用して、MS SQL データベースからデータのサブセットを選択していPreparedStatement
ます。結果セットを繰り返しながら、行も更新したいと考えています。現時点では、次のようなものを使用しています。
データベースは正しい値で更新されますが、次の例外が発生します。
私はそれをグーグルで検索しましたが、問題に関するヘルプを見つけることができませんでした.
この例外を防ぐにはどうすればよいですか? または、プログラムは私がやりたいことを実行するので、それを無視できますか?
php - 準備済みステートメントからのデータのフェッチ
LIKE クエリに基づいて選択された、データベースからのレコードを含む行の配列を返す関数があります。セキュリティ上の理由から、このクエリを準備済みステートメントにしたいと考えています。どうやら私がやっているように、バインドされたパラメーターとクエリ関数を使用することはできません。その場合、クエリを準備済みステートメントとして保持し、返そうとしている行を返す方法がわかりません。
while ループにはまったく入っていません。
.net - .Net @ VS. で MySQL を使用したプリペアド ステートメント
MySQL .Net コネクタのドキュメント によると、準備済みステートメントを実行する場合、@ 記号を使用してパラメーターを定義します。これを試してみると、エラーが発生しました。次に、ページの下部にあるユーザー コメントに、問題がある場合は ? を置き換えると書かれています。@ 文字の場合。MySQL が準備済みステートメントに期待する文字を制御する方法はありますか? 移行しようとしている SQL Server に似たものにするため、「@」記号を使用することをお勧めします。
java - PreparedStatement での SQL の JDBC 生成
最近、非常に大きな問題が発生し、デバッグに多くの時間がかかりました。テーブルの 32 列を更新する更新ステートメントがあります。私は PreparedStatement でそれを行いました。誤って setParameter() 呼び出しを 1 つ削除したため、更新を正常に完了できませんでした。
JDBC (Apache Derby) から「少なくとも 1 つのパラメーターが初期化されていません」という例外が発生し、ドライバーが名前または少なくとも最初のパラメーターの序数について何も通知しないため、どのパラメーターが設定されていないかを特定できませんでした。設定されていません...
私は、(ほぼ完成した) 準備済みステートメントから単純な古い SQL を生成するいくつかのユーティリティをグーグルで検索することに失敗しました。何が設定されていないかを見ることができるので、このような状況では大いに役立ちます。
誰もこの問題に直面しましたか? 解決策はありますか?
java - PreparedStatementsとパフォーマンス
そのため、PreparedStatementsはパフォーマンスに優れていると聞き続けています。
「PreparedStatement」よりも通常の「Statement」を使用するJavaアプリケーションがあります。より多くのPreparedStatementsを使用する方向に進んでいる間、私は、PreparedStatementsがクライアント側とサーバー側でどのように機能するかをより完全に理解しようとしています。
それで、いくつかの典型的なCRUD操作があり、アプリケーションでオブジェクトを繰り返し更新する場合、PSを使用するのに役立ちますか?毎回PSを閉じる必要があることを理解しています。そうしないと、カーソルリークが発生します。
では、パフォーマンスにどのように役立ちますか?ドライバはプリコンパイルされたステートメントをキャッシュし、次にconnection.prepareStatementを実行するときにコピーを提供しますか?または、DBサーバーは役に立ちますか?
PreparedStatementsのセキュリティ上の利点についての議論を理解し、それを強調する以下の回答に感謝します。ただし、PreparedStatementsのパフォーマンス上の利点に焦点を当ててこの議論を続けたいと思います。
更新:データの更新と言うとき、私は実際には、そのメソッドがランダムに数回呼び出されるという意味でより多くのことを意味します。ループ内でステートメントを再利用するように求める以下の回答の利点を理解しています。
'ps' javaオブジェクトを実際に再利用する方法はなく、実際のconnection.prepareStatement呼び出しは非常にコストがかかることを理解しています。
それが私を元の質問に戻すものです。この「いくつかのSQL」PreparedStatementは、私が知らないカバーの下でまだキャッシュされ、再利用されていますか?
また、いくつかのデータベースをサポートしていることにも言及する必要があります。
前もって感謝します。
php - MySQL - 結果を返す前に PHP 関数を介してデータベース フィールドを渡す
http://php.morva.net/manual/en/mysqli-stmt.bind-result.phpの次のコードは、mysqli クエリが準備および実行されていることを示しています。while ($stmt->fetch()) ループは、結果リソースを生成しているように見えます。これを変更して、関数への呼び出しを含めることはできますか?
次に、print_r($result) の代わりに return($result) を返します。そうすれば、 $val の値を動的に変更できます
元のコード =
これは機能しますか、他にどのようにこれを行うことができますか?
皆さんありがとう...
php - mysql クエリの内容を表示すると、最初のフィールドのみが機能します
私はphpでmysqli prepardクエリを使用しています。コードは次のとおりです。
これはかなり奇妙です。ユーザー名は、表示される唯一のフィールドです。他の列が返されない/バインドされないのはなぜですか?
私が行った場合
データベースに直接アクセスすると、すべてのフィールドが表示され、すべてに有効なデータが含まれます。
php - 一般的なエスケープ関数を使用するよりも、mysql のプリペアド ステートメントを使用する方が安全なのはなぜですか?
別の質問には、次のようなコメントがあります。
「データベースクエリに関しては、常に準備されたパラメーター化されたクエリを試して使用してください。mysqli および PDO ライブラリはこれをサポートしています。これは、mysql_real_escape_string などのエスケープ関数を使用するよりもはるかに安全です。」
だから、私が聞きたいのは、準備されたパラメーター化されたクエリがより安全なのはなぜですか?