0

最近、PHP プロジェクトで ext/mysql から mysqli に切り替えました。そのプロジェクトでは、パラメータ セットを にmysql_connect設定して、 の接続再利用機能を広範囲に使用しました。new_linkfalse

私が理解している限りでは、そのようなメカニズムはありませんmysqli_connect。同じホストとユーザーが使用されていても、常に新しい接続が返されます。これは正しいです?再利用動作を模倣できる他の機能はありますか?

注意: ホストの先頭に を追加するとp:、永続的な接続が作成されることがわかります。ただし、私のプロジェクトの一部は一時テーブルに依存しているため、これは私の場合は使用できません。

更新:
実際の mysqli オブジェクトは、データベースへのアクセスを管理する DB ハンドラー クラスに埋め込まれています。このハンドラーは、DB と対話するために常に使用されます。

問題を単純化しすぎたのは、mysqli がmysqli_connect同一のパラメーターを使用して を複数回呼び出して単一の接続を自動的に再利用できるかどうかという問題に集中したかったからです。私のプロジェクトはフレームワークの拡張であり、複数のエントリ ポイントとフックを提供します。ホスティング フレームワークから拡張機能への関数呼び出しの順序または回数を制御できません。拡張機能の各部分は DB ハンドラーのインスタンスを作成しますが、実際の基礎となる接続を再利用できます。

DB ハンドラーの作成は、db-factory を介して行われます。したがって、おそらく何らかの接続キャッシュを自分で実装する必要があります...

4

1 に答える 1

0

いいえ、mysqli ext はその怠惰な mysql ext の動作には従いませんが、それには理由があります。
したがって、常に明示的に mysqli オブジェクトを指定する必要があります。ただし、唯一の問題は変数のスコープにあります。ただし、オブジェクトが表示されている限り、問題なく$mysqli使用できます。

ただし、別の問題があり$mysqliます。アプリケーション コードで object をまったくアドレス指定しないでください。これは、古い mysql ext の問題であり、mysqli ext の問題でもあります。アプリケーション コードでそのまま使用することは意図されていません。

すべてのデータベース関連のものをカプセル化するために、ある種のラッパーを作成する必要があり、アプリケーションコードでは常にこのラッパークラスのみを使用します。

したがって、そのようなラッパーを自分で取得し、そのインスタンスを作成してから、すべてのクラスと関数にパラメーターとして渡します。

于 2013-08-28T10:34:37.523 に答える