問題タブ [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 - どの PHP / MySQL ドライバーまたはデータベース抽象化レイヤーがプリペアド ステートメントをサポートしていますか?
私は、デフォルトの PDO および PDOStatement クラスの拡張バージョンで構築されたプロジェクトに取り組んでおり、「?」の代わりに PDO スタイルの名前付きパラメーターを使用しています。変数のプレースホルダー。
しかし、クライアントは現在、別のドライバーの使用を検討するよう要求しています。これは、クライアントのバージョンの OS X Web サーバーには、このドライバーを簡単にインストールできないように見えるためです。では、PDO のように名前付きパラメーターを使用する現在の機能セットで簡単に拡張できる、他のデータベース抽象化ライブラリーまたはデータベース アクセス ドライバーを知っている人はいますか?
java - PreparedStatement IN 節の代替案は?
IN
のインスタンスで SQL 句を使用するための最善の回避策は何ですかjava.sql.PreparedStatement
。これは、SQL インジェクション攻撃のセキュリティ上の問題により、複数の値に対してサポートされていません: 1 つの?
プレースホルダーは、値のリストではなく 1 つの値を表します。
次の SQL ステートメントを検討してください。
Usingは、本質的には、そもそも preparedStatement.setString( 1, "'A', 'B', 'C'" );
使用する理由の回避策として機能しない試みです。?
どのような回避策がありますか?
php - プリペアド ステートメントとストアド プロシージャ
php5 と mysql5 を使用している場合、プリペアド ステートメントよりもストアド プロシージャを使用する利点はありますか? (mysql5ストアドプロシージャから実質的なパフォーマンスの向上が得られない可能性がある場所を読んだ)
php - 動的プリペアドステートメントは悪いですか? (php + mysqli で)
動的 SQL の柔軟性が気に入っています。セキュリティとプリペアド ステートメントのパフォーマンスの向上が気に入っています。したがって、私が本当に必要としているのは Dynamic Prepared Statements です。これは、bind_param と bind_result が「固定」数の引数を受け入れるため、作成するのが面倒です。そこで、この問題を回避するために eval() ステートメントを使用しました。しかし、これは悪い考えだと感じています。ここに私が意味するコードの例があります
その最後の eval() ステートメントは悪い考えですか? 変数名 $param の後ろに値をカプセル化することで、コード インジェクションを回避しようとしました。
誰か意見や他の提案はありますか? 注意が必要な問題はありますか?
java - Java での PreparedStatements のロギング
クエリ自体ではなく、PreparedStatement がある場合に SQL (JDBC) エラーをログに記録することは、常に面倒なことの 1 つです。
あなたはいつも次のようなメッセージで終わります:
もちろん、値を取得し、疑問符を実際の値で解析/置換するためのヘルパー メソッドを作成することもできます (この質問の結果が得られない場合は、おそらくそのパスをたどるでしょう)。この問題は他の誰かによって以前に解決されました。また、私のために自動的にそれを行う汎用ログヘルパーがあるかどうか。
いくつかの回答の後に編集:
これまでに提供されたライブラリは、デバッグ用のステートメントをログに記録するのに適しているようです。これは間違いなく便利です。ただし、PreparedStatement 自体 (一部のサブクラスではない) を取得し、エラーが発生するたびにその SQL ステートメントをログに記録する方法を探しています。PreparedStatement の代替実装を使用して運用アプリを展開したくありません。
PreparedStatement の特殊化ではなく、ユーティリティ クラスを探していると思います。
ありがとう!
oracle - OracleODBCを使用した準備済みステートメントと直接ステートメントの違い
OS言語とは異なる照合でOracleデータベースを使用しています。ODBCドライバーを使用してデータベースにアクセスしています。DBの照合でサポートされている特殊な非ASCII文字を含むステートメント(たとえば、「select * from x where =?」)を準備すると、その文字を含むデータ行が見つかります。SQL文字列の引数を使用してselectを直接実行すると、データ行が見つかりません。
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で実行していました
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 = "";
戻ります。NULL
1
java - dbcp での PreparedStatement プーリングの使用
dbcp を使用して準備された接続プールをどのように使用できるかを誰かが説明できますか? (可能であれば、いくつかのサンプルコードを添えて)。私はそれをオンにする方法を見つけました - KeyedObjectPoolFactory を PoolableConnectionFactory に渡します。しかし、その後、特定の準備済みステートメントをどのように定義する必要があるのでしょうか? 現在、プールから接続を取得するために PoolingDataSource のみを使用しています。プールから準備済みステートメントを使用するにはどうすればよいですか?
java - ArrayListをOracleのPreparedStatementにバインドするにはどうすればよいですか?
ArrayList(またはそれに関しては任意の種類のリスト)をPreparedStatementにバインドする方法があるかどうか疑問に思いました。これは、最終的にOracleデータベースへのアクセスに使用されます。私が見つけた:
これは私の問題に似ているように見えますが、この質問はより具体的です。Oracleで使用するPreparedStatementにArrayListをバインドしたいのですが、可能であれば、これはどのように達成されますか?