0

私は、多くの異なるファイルに分割されている大規模な手続き型の php/mysql Web サイトを持っています。各ファイル内に、dbconn.php を含めて、db 接続が利用できるようにします。

次のようになります。

index.php

<?php 
   include_once ('header.php');
   include_once ('nav.php');
   include_once ('content.php');
   include_once ('sidebar.php');
   include_once ('footer.php');
?>

そして、これらの各ファイル内で、include_once を介して他のいくつかのファイルを呼び出します。したがって、合計で約 30 の異なるファイルが作成されます。

すべてのファイルは次で始まります。

include_once($_SERVER['DOCUMENT_ROOT'].'/dbconn.php');

私は include_once を使用しているので、dbconn.php を複数回ロードするべきではありませんが、最近、次の php 警告が表示されます。

PHP Warning:  mysqli_connect(): (HY000/1226): User 'username' has exceeded the 'max_user_connections' resource (current value: 20) in /var/www/html/dbconn.php on line 10

私の dbconn.php は次のようになります。

<?php
   $host = "localhost";
   $user = "username";
   $pass = "password";
   $db = "dbname";

   if(!mysqli_thread_id($con)){
       $con = mysqli_connect($host, $user, $pass, $db);
       mysqli_set_charset($con, 'utf8');
   }
   unset($host,$user,$pass,$db);
?>

そのため、ダブルチェックがあります。開いている mysql 接続が既に存在する場合、ファイルは基本的に何もしません。

私は何を間違っていますか?この php 警告が表示されるのはなぜですか? また、mysql 接続の量を減らすにはどうすればよいですか?

4

2 に答える 2

0

シングルトンパターンを使用して問題を解決しました。そこで、mysqli 手続き型コードを mysqli オブジェクト指向に変更しました。

ここでパターンを取得しました: http://www.davecomeau.net/blog/1/Single+Database+Object+in+PHP+5+Using+the+Singleton+Pattern

于 2014-06-24T14:52:06.153 に答える
0

基本的に、問題の原因となっているのは、1 つのページからのさまざまな呼び出しではありません。現時点で複数の OPEN 接続があるという事実です。

接続が目的を果たした後は、必ず接続を閉じてください。

また、現在持っているような構造を避け、DB 関連のものをすべて 1 つのファイルに含め、それをページに 1 回だけ含めるようにしてください。

于 2014-06-23T13:35:05.967 に答える