PHP 5.3のmysqliドライバーのMysql_pconnectの代替

データベースに接続するためのドライバーとして、mysqliを使用しました。 問題は、テストサーバーの1つのテーブルに500,000を超えるレコードを追加したときに始まりました。 データベースが次のように設定されていたにもかかわらず、データベースへの接続には1〜10秒かかりました。

$db['default']['pconnect'] = TRUE;
      
      





つまり、接続は永続的な接続を介して行われます。



理論のビット



mysql_pconnectは、mysql_connectと同じことを行いますが、2つの重要な例外があります。



解決策



ここにあります。 /system/database/drivers/mysqli/mysqli_driver.phpファイル。 スクリプトは永続的な接続の「フラグ」を無視し、通常のmysqli_connect関数を介して接続を作成します。

 function db_pconnect(){ $this->db_connect(); }
      
      







Mysqliにはmysqli_pconnect関数がありません。 永続的な接続は、別の方法で編成されます。 php.netからの回答:

 To open a persistent connection you must prepend p: to the hostname when connecting.
      
      





ホスト名の前に「p:」を追加するだけです。 db_pconnect()関数の書き換え



 function db_pconnect(){ $this->hostname = 'p:'.$this->hostname; $this->db_connect(); }
      
      







発言



このソリューションは、PHP 5.3以上で機能します。

フレームワークのコアで関数を書き換えることはありがたいことではありませんが、解決策は非常に迅速かつ簡単です。 このドライバクラスを拡張する機能を備えたよりエレガントなソリューションがある場合は、コメントしてください。



参照資料



mysqli拡張機能と永続的な接続



All Articles