PHP防止多个MySQL连接

时间:2014-06-23 13:32:49

标签: php mysql mysql-connect php-include

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

它看起来像这样:

的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连接数?

2 个答案:

答案 0 :(得分:0)

基本上,导致问题的单个页面的调用并不相同。这是因为您目前有多个OPEN连接。

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

另外,尽量避免使用当前的结构,将所有与数据库相关的内容包含在一个文件中,然后只在页面中包含一次。

答案 1 :(得分:0)

我通过使用单例模式解决了这个问题。 所以我将mysqli prodecural代码改为mysqli面向对象。

我在这里得到了这个模式: http://www.davecomeau.net/blog/1/Single+Database+Object+in+PHP+5+Using+the+Singleton+Pattern