問題タブ [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.

0 投票する
4 に答える
825 参照

php - どの PHP / MySQL ドライバーまたはデータベース抽象化レイヤーがプリペアド ステートメントをサポートしていますか?

私は、デフォルトの PDO および PDOStatement クラスの拡張バージョンで構築されたプロジェクトに取り組んでおり、「?」の代わりに PDO スタイルの名前付きパラメーターを使用しています。変数のプレースホルダー。

しかし、クライアントは現在、別のドライバーの使用を検討するよう要求しています。これは、クライアントのバージョンの OS X Web サーバーには、このドライバーを簡単にインストールできないように見えるためです。では、PDO のように名前付きパラメーターを使用する現在の機能セットで簡単に拡張できる、他のデータベース抽象化ライブラリーまたはデータベース アクセス ドライバーを知っている人はいますか?

0 投票する
31 に答える
352190 参照

java - PreparedStatement IN 節の代替案は?

INのインスタンスで SQL 句を使用するための最善の回避策は何ですかjava.sql.PreparedStatement。これは、SQL インジェクション攻撃のセキュリティ上の問題により、複数の値に対してサポートされていません: 1 つの?プレースホルダーは、値のリストではなく 1 つの値を表します。

次の SQL ステートメントを検討してください。

Usingは、本質的には、そもそも preparedStatement.setString( 1, "'A', 'B', 'C'" );使用する理由の回避策として機能しない試みです。?

どのような回避策がありますか?

0 投票する
7 に答える
21712 参照

php - プリペアド ステートメントとストアド プロシージャ

php5 と mysql5 を使用している場合、プリペアド ステートメントよりもストアド プロシージャを使用する利点はありますか? (mysql5ストアドプロシージャから実質的なパフォーマンスの向上が得られない可能性がある場所を読んだ)

0 投票する
3 に答える
6665 参照

php - 動的プリペアドステートメントは悪いですか? (php + mysqli で)

動的 SQL の柔軟性が気に入っています。セキュリティとプリペアド ステートメントのパフォーマンスの向上が気に入っています。したがって、私が本当に必要としているのは Dynamic Prepared Statements です。これは、bind_param と bind_result が「固定」数の引数を受け入れるため、作成するのが面倒です。そこで、この問題を回避するために eval() ステートメントを使用しました。しかし、これは悪い考えだと感じています。ここに私が意味するコードの例があります

その最後の eval() ステートメントは悪い考えですか? 変数名 $param の後ろに値をカプセル化することで、コード インジェクションを回避しようとしました。

誰か意見や他の提案はありますか? 注意が必要な問題はありますか?

0 投票する
4 に答える
17813 参照

java - Java での PreparedStatements のロギング

クエリ自体ではなく、PreparedStatement がある場合に SQL (JDBC) エラーをログに記録することは、常に面倒なことの 1 つです。

あなたはいつも次のようなメッセージで終わります:

もちろん、値を取得し、疑問符を実際の値で解析/置換するためのヘルパー メソッドを作成することもできます (この質問の結果が得られない場合は、おそらくそのパスをたどるでしょう)。この問題は他の誰かによって以前に解決されました。また、私のために自動的にそれを行う汎用ログヘルパーがあるかどうか。

いくつかの回答の後に編集:

これまでに提供されたライブラリは、デバッグ用のステートメントをログに記録するのに適しているようです。これは間違いなく便利です。ただし、PreparedStatement 自体 (一部のサブクラスではない) を取得し、エラーが発生するたびにその SQL ステートメントをログに記録する方法を探しています。PreparedStatement の代替実装を使用して運用アプリを展開したくありません。

PreparedStatement の特殊化ではなく、ユーティリティ クラスを探していると思います。

ありがとう!

0 投票する
1 に答える
527 参照

oracle - OracleODBCを使用した準備済みステートメントと直接ステートメントの違い

OS言語とは異なる照合でOracleデータベースを使用しています。ODBCドライバーを使用してデータベースにアクセスしています。DBの照合でサポートされている特殊な非ASCII文字を含むステートメント(たとえば、「select * from x where =?」)を準備すると、その文字を含むデータ行が見つかります。SQL文字列の引数を使用してselectを直接実行すると、データ行が見つかりません。

0 投票する
5 に答える
14551 参照

java - MySQL プリペアード ステートメント キャッシングの使用方法

プリペアド ステートメントをキャッシュする MySQL の機能を利用するにはどうすればよいですか? 準備済みステートメントを使用する理由の 1 つは、同じ準備済みステートメントを再度使用する場合に、準備済みステートメント自体を複数回送信する必要がないことです。

上記の Java の例を実行すると、mysqld ログ ファイルに 5 組の Prepare コマンドと Execute コマンドが表示されます。ps 割り当てをループの外に移動すると、もちろん、1 つの Prepare コマンドと 5 つの Execute コマンドになります。接続パラメータ「cachePrepStmts=true」は、ここでは何の違いもないようです。
Spring と Hibernate を使用して同様のプログラムを実行する場合、送信される Prepare コマンドの数 (1 または 5) は、cachePrepStmts 接続パラメーターが有効になっているかどうかによって異なります。Hibernate は、cachePrepStmts 設定を利用するために準備済みステートメントをどのように実行しますか? 純粋な JDBC を使用してこれを模倣することは可能ですか?
これをMySQL Server 4.1.22およびmysql-connector-java-5.0.4.jarで実行していました

0 投票する
7 に答える
39685 参照

php - MySQLのnull以外の列に空の文字列がありますか?

私は、PHPからMySQLを実行するために、標準のmysql_connect()、mysql_query()などのステートメントを使用していました。最近、私は素晴らしいMDB2クラスの使用に切り替えています。それに加えて、プリペアドステートメントを使用しているので、入力やSQLインジェクション攻撃を逃れることを心配する必要はありません。

しかし、私が直面している問題が1つあります。null以外として指定されている(つまり、NULL値を許可しない)VARCHAR列がいくつかあるテーブルがあります。古いMySQLPHPコマンドを使用すると、次のようなことが問題なく実行できます。

ただし、次のようなクエリがある場合:

そして、PHPでは次のようになります。

null value violates not-null constraintこれにより、エラー「 」がスローされます

一時的な回避策として、$value空かどうかを確認し、 " "(単一のスペース)に変更しますが、これは恐ろしいハックであり、他の問題を引き起こす可能性があります。

代わりにNULLを挿入しようとせずに、プリペアドステートメントで空の文字列を挿入するにはどうすればよいですか?

編集:プロジェクトが大きすぎてコードベース全体を調べ、空の文字列 ""を使用しているすべての場所を見つけて、代わりにNULLを使用するように変更します。私が知る必要があるのは、標準のMySQLクエリが「」とNULLを2つの別個のものとして扱うのに(私が正しいと思うように)、プリペアドステートメントが「」をNULLに変換する理由です。

「」とNULLは同じものではないことに注意してください。たとえば、期待どおりの代わりにSELECT NULL = "";戻ります。NULL1

0 投票する
3 に答える
9434 参照

java - dbcp での PreparedStatement プーリングの使用

dbcp を使用して準備された接続プールをどのように使用できるかを誰かが説明できますか? (可能であれば、いくつかのサンプルコードを添えて)。私はそれをオンにする方法を見つけました - KeyedObjectPoolFactory を PoolableConnectionFactory に渡します。しかし、その後、特定の準備済みステートメントをどのように定義する必要があるのでしょうか? 現在、プールから接続を取得するために PoolingDataSource のみを使用しています。プールから準備済みステートメントを使用するにはどうすればよいですか?

0 投票する
3 に答える
24408 参照

java - ArrayListをOracleのPreparedStatementにバインドするにはどうすればよいですか?

ArrayList(またはそれに関しては任意の種類のリスト)をPreparedStatementにバインドする方法があるかどうか疑問に思いました。これは、最終的にOracleデータベースへのアクセスに使用されます。私が見つけた:

PreparedStatement IN句の代替?

これは私の問題に似ているように見えますが、この質問はより具体的です。Oracleで使用するPreparedStatementにArrayListをバインドしたいのですが、可能であれば、これはどのように達成されますか?