問題タブ [mdb2]
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 - MDB2 が切断され、再接続時に文字セット設定が忘れられる
最近、奇妙なバグをデバッグしました。解決策は見つかりましたが、完全に満足できるものではありません。
IntSmarty を使用して Web サイトをローカライズし、ローカライズされた文字列を独自のラッパーを使用してデータベースに保存します。そのデストラクタで、IntSmarty はそれが持っている可能性のある新しい文字列を保存し、データベース呼び出しを行います。
MDB2 の Singleton インスタンスを使用して MySQL に対してクエリを実行し、接続後に SetCharset() 関数を使用して文字セットを UTF-8 に変更しました。IntSmarty によって保存された文字列は、最終的な挿入が行われたときに ISO-8859-1 として解釈されることがわかりました。クエリ ログを詳しく調べたところ、IntSmarty のデストラクタが呼び出される前に MySQL 接続が切断されたことがわかりました。その後、再確立されましたが、新しい接続で「SET NAMES utf8」クエリは発行されませんでした。これにより、保存された文字列が MySQL によって ISO-8859-1 として解釈されました。
MDB2 でデフォルトの文字セットを設定するオプションはないようです。この問題に対する私たちの解決策は、MySQL サーバーの構成を変更することでした。
my.cnf に。これは、文字セットが常に同じであるという問題を解決するだけです。
では、すべてのクエリが実行される前に接続が切断されるのを防ぐ方法はありますか? MDB2 インスタンスを強制的に破棄することはできますか?
永続的な接続をオンにすることは機能しますが、望ましい答えではありません。
php - MySQL で準備されたクエリは、セッションごとに 1 回のクエリのパフォーマンス上の利点を提供しますか?
ドキュメントによると、準備されたクエリは、クエリを解析する MySQL サーバーのオーバーヘッドが 1 回しか発生しないため、クエリを複数回実行している場合にパフォーマンスが大幅に向上します。そこでの「複数回」とは正確にはどういう意味なのか疑問に思っています。
つまり、クエリを 1 回実行する Web ページがあるとします。ここで、そのページが毎秒 50 回呼び出されるとします。パフォーマンスの観点から、クエリを prepare() する方が理にかなっていますか (したがって、DB サーバーへの 2 回のラウンドトリップが必要です。1 回はクエリの準備に、もう 1 回はクエリの実行に必要です)、またはクエリを通常どおりに送信するだけです (1 回のラウンドトリップのみが必要です)。 ? MySQL および/または PHP mysqli ドライバーは、以前の呼び出しでクエリがいつ prepare() されたかを認識するのに十分スマートですか?
php - PHPUnitデータベースでMDB2を使用していくつかのテストを行う方法は?
PHPUnitデータベースを使用して、MDB2を使用していくつかのクラスをテストします。
エラーを返す2番目のテストに遭遇したので、すべてが順調です。
キャッチされた例外:クラスMDB2_Errorのオブジェクトを文字列に変換できませんでした
最初のテストの代わりに2番目のテストを配置すると、新しい最初のテストはOKですが、2番目のテストは同じエラーを返します。そして次のものも!
たぶん、MDB2接続は最初のテストの後に閉じられますか?
これが私のコンストラクターです:
MyDBAはシングルトンを返します。コンストラクター内で例外は発生しません...
最初の2つのテストは次のとおりです。
php - PHP: MYSQL で MDB2 の文字列に quote() を使用する
私は Pear の MDB2 を使用しており、とても楽しんでいますが、何かが気になり始めています。mdb2 パッケージの quote メソッドを使用して、次の方法で SQL 文字列を作成します。
(このページの例で説明されているように: http://pear.php.net/manual/en/package.database.mdb2.intro-quote.php )
データベースではすべてが見栄えがします。しかし、データベースからデータを抽出するとき、まだ MDB2 を使用しているため、quote メソッドによって追加された引用を取り除く簡単な方法が見つからないようです。現時点ではストリップスラッシュを使用していますが、これは正しくないようです。どこかに設定がありませんか?パッケージを間違った方法で使用していますか?
助けてくれてありがとう、レイフ
php - 結合されたテーブルを含むクエリからすべてのフィールド値を取得するにはどうすればよいですか?
私はこの基本的なクエリを持っています:
from を使用MDB2
しPEAR
て実行し、戻り値を読み取ります。
しかし、どういうわけか、結果の配列には常にorder_positions
テーブルのフィールドのみが含まれます!つまり、結果の配列は次のようになります。
こうなりたいと思いながら
私はすでに次のことを試しました:
- フィールドの順序を変更します。つまり、
code
最初に、次にdescription
. - 結合されたテーブルの順序を変更します。
- エイリアスの代わりに完全なテーブル名を使用しました。
- 代わりに「MySQL 結合」を使用しました (
SELECT FROM table1, table2 WHERE table1.id = table2.id
) - の有無にかかわらず使用されるエイリアス
AS
。
その他の事実:
- このクエリを MySQL Query Browser で実行すると問題なく動作し、すべてのフィールドが返されます。
order_positions
何があっても、テーブルが好まれているようです。追加のテーブルと結合すると、このテーブルからのみフィールドが取得されます。
php - Pear Log MDB2 メッセージの長さとエラー
最近、PEAR を使用して SQL ロギング フレームワークをセットアップしましたが、すべて正常に機能していました。
しかし、メッセージフィールド ( VARCHAR 200
) のデフォルトの長さが少し短いと思ったので、phpmyadmin のデータベース構造を変更して、これを に増やしました512
。
しかし、この変更によりロギングが完全に機能しなくなったことにすぐに気付きました。すぐに長さを に戻しました200
。ただし、この変更の後でも、ロギングはまだ壊れています。エラーをログ機能まで追跡しましたが、残念ながら、失敗した具体的な理由はわかりません。
だから、私の質問は2つあります:
PEAR ロギングを使用しているときに、この問題または同様の問題に遭遇した人はいますか?
より長いメッセージ フィールドを作成する正しい方法は何ですか?
php - PEAR の後継: PHP 5.3 上の MDB2
私は長年、phpでpearパッケージを使用してきました。MDB2 pear パッケージを使用するサイトをアップグレード/移動中ですが、PHP 5.3.X 用に更新されていません。
5.3 では、MDB2 がこれらの新しい厄介なエラーを返しています。
エラー報告の設定を変更してそれらを取り除くことができることは知っていますが、例外を設けたくありません。とにかく、最近MDB2を使用していて解決策を持っている人はいますか? 推奨する同様のデータベース パッケージはありますか?
php - Pear MDB2 パッケージでクラス mdb2_error を再宣言できません
PC に pear をインストールしていません。代わりに、パッケージをダウンロードして、Web アプリの "libs" 辞書に解凍します。Web アプリの辞書の構造は、おおよそ次のようになります。
アプリケーションは 2 台の PC で正常に動作しますが、仮想ホストでの実行中に「クラス mdb2_error を再宣言できません」というエラーがスローされます。