0

我有一个大型程序风格的 php/mysql 网站,它被分成许多不同的文件。在每个文件中,我都包含了我的 dbconn.php,以确保数据库连接可用。

它看起来像这样:

索引.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

基本上,导致问题的不是来自单个页面的不同调用。这是您目前有多个 OPEN 连接的事实。

确保在它们达到目的后关闭你的连接。

此外,尽量避免您目前拥有的那种结构,将所有与数据库相关的内容包含在一个文件中,然后在您的页面上只包含一次。

于 2014-06-23T13:35:05.967 回答