問題タブ [pdo]
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 のコミット/ロールバックを実装するにはどうすればよいですか?
基本的に、このスクリプトは実行に時間がかかり、タイムアウトすることもあり、データベースの周りに半完全なデータが残っています。(はい、完璧な世界では、コミットとロールバックを実装する代わりにそれを修正することを知っていますが、そうしないことを余儀なくされています)
これが私の基本的なコードです(簡単にするために簡略化しています):
したがって、私の問題は、そのwhileループ内のプロセス全体が完了していない場合、挿入された行がそこに留まらないようにすることです。whileループの最初と最後でコミット/ロールバックを使用してこれを行うことができると思いますが、方法がわかりません。
php - 名前付きパラメーター、キャッシング、および PDO
次のようなパラメーター化された SQL ステートメントがある場合:
PDOがこれ(以下を参照)を同じSQL文として認識し、完全に異なるSQL文であると想定する代わりにキャッシュを使用するかどうかは誰にもわかりません:
したがって、問題は次のとおりだと思います。パラメーター化された選択ステートメントでパラメーターの名前が変更されたが、他に何も変更されていない場合でも、キャッシュのパフォーマンス上の利点は得られますか? または、パラメーター名が同じままであることを確認する必要がありますか?
php - Mac 上の PDO MySQL ドライバー
私は、約 1 年前にビルドされたカスタム PHP 5 インストールの Mac を持っています。日曜日中ずっとかかったのを覚えており、それを正しくするために約 20 回コンパイルしなければなりませんでした。私が持っている MySQL はエントロピーからのもので、プリコンパイルされています。
ここで、MySQL ドライバーが動作する状態で PDO を取得する必要がありますが、ドライバーはインストールされていません。「pecl install pdo_mysql」を試してみましたが、いくつかの mysql ファイルが見つからない時点で停止します。これをすばやく修正する方法はありますか?
これをトラブルシューティングするために必要なパスやメッセージを投稿します。PHP を最初からコンパイルする必要がありますか? それとも、pdo_mysql 拡張機能だけをコンパイルできますか?
怠惰に見えないことを願っています。書くコードがたくさんあり、PHP 構成と格闘する時間があまりありません。
php - PDOクエリの問題
古いmysql_*関数からPDOにいくつかのコードを更新しています。問題なく接続し、問題なくクエリを実行しますが、結果セットは空です。PDO :: query()はPDOStatementオブジェクトを返すことになっていますが、その代わりにtrueを取得しています。エラーは報告されません。
これが私のコードです:
私が見ている出力は次のとおりです。
オブジェクトtrueエラー:getClientInfoクエリが失敗しました。
結果が返されない理由はありますか?
php - PHP5 の PDO rowCount MySQL の問題の回避策
私は最近、PHP5 を使用して新しいプロジェクトの作業を開始し、その PDO クラスを使用したいと考えています。問題は、MySQL PDO ドライバーが rowCount() をサポートしていないため、クエリを実行してから、影響を受ける行または返された行の数を取得する方法がないことです。これは、私に関する限り、かなり大きな問題です。他の誰かが以前にこれに対処したことがあるかどうか、そしてあなたがそれを回避するために何をしたか疑問に思っていました. fetch() または fetchAll() を実行して、行が影響を受けているか返されているかどうかを確認する必要があるのは、私にはハックのように思えます.
php - プリペアド ステートメントを使用しないのはいつですか?
最小限のデータベースを使用する PHP 駆動の Web サイトを再設計しています。元のバージョンでは、"pseudo-prepared-statements" (クォートとパラメーターの置換を行う PHP 関数) を使用して、インジェクション攻撃を防ぎ、データベース ロジックをページ ロジックから分離していました。
これらのアドホック関数を、PDO と実際のプリペアード ステートメントを使用するオブジェクトに置き換えるのは当然のことのように思えましたが、それらについて読んだ後では、よくわかりません。PDO は依然として素晴らしいアイデアのように思えますが、プリペアド ステートメントの主なセールス ポイントの 1 つは、それらを再利用できることです。これが私のセットアップです:
- ステートメントはすべて自明です。ほとんどは の形式
SELECT foo,bar FROM baz WHERE quux = ? ORDER BY bar LIMIT 1
です。多くの中で最も複雑なステートメントは、s で結合された 3 つの selectUNION ALL
です。 - 各ページ ヒットは、多くても1 つのステートメントを実行し、1 回だけ実行します。
- 私はホストされた環境にいるため、個人的に「ストレステスト」を行ってサーバーを非難することに不安を感じています.
プリペアド ステートメントを使用すると、データベースへの往復回数が少なくとも 2 倍になることを考えると、それらを避けたほうがよいでしょうか? PDO::MYSQL_ATTR_DIRECT_QUERY
パラメータ化とインジェクション防御の利点を維持しながら、複数のデータベーストリップのオーバーヘッドを回避するために使用できますか? それとも、準備されたステートメント API で使用されるバイナリ呼び出しは、準備されていないクエリを実行する場合と比較して、心配する必要がないほど十分に機能しますか?
編集:
皆さん、良いアドバイスをありがとう。これは、複数の回答を「承認済み」としてマークできたらいいのにと思います。さまざまな視点がたくさんあります。しかし、最終的には、私はリックに当然のことをしなければなりません... 彼の答えがなければ、私は幸せに立ち去り、みんなのアドバイスに従ったとしても、完全に間違ったことをしたでしょう. :-)
エミュレートされた準備済みステートメントです。
php - SQLiteトランザクションが期待どおりに機能しない
「1.php」と「2.php」の2つのファイルを用意しました。
「1.php」はこんな感じです。
「2.php」はこんな感じです。
そして私は「1.php」を実行します。トランザクションを開始し、55秒待機します。
したがって、すぐに「2.php」を実行すると、次のようになります。
- 「1.php」はトランザクションを取得しており、
- 「1」はデータベースロックを保持します
- 「2」は取引を開始できません
- 「2」はデータベースロックを取得できないため、
- 「2」は55秒待たなければなりません
しかし、しかし、テストは別の方向に進みました。「2」を実行すると、
- 「2」はすぐに結果を返しました
- 「2」は待たなかった
したがって、「1」はトランザクションを取得できなかったか、データベースロックを取得できなかったと考える必要があります。
誰か助けてもらえますか?
php - PHP PDO バッファリングされたクエリの問題
PHP データ オブジェクト関数で深刻な問題が発生しています。セット全体のフェッチを避けるために、バッファリングされたクエリを使用して、かなり大きな結果セット (~60k 行、~1gig) をループしようとしています。
私が何をしても、スクリプトは PDO::query() でハングするだけです - クエリがバッファリングされていないようです (結果セットのサイズを変更すると問題が「修正」されるのはなぜですか?)。問題を再現するための私のコードは次のとおりです。
妥当な数でクエリを制限すると、問題なく動作します。
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE で遊んで、PDO::prepare() と PDO::execute() も使用してみました (ただし、上記のクエリにはパラメーターはありません)、どちらも役に立ちませんでした。どんな助けでも大歓迎です。