我有一个很大的程序风格的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连接数?
答案 0 :(得分:0)
基本上,导致问题的单个页面的调用并不相同。这是因为您目前有多个OPEN连接。
确保在达到目的后关闭连接。
另外,尽量避免使用当前的结构,将所有与数据库相关的内容包含在一个文件中,然后只在页面中包含一次。
答案 1 :(得分:0)
我通过使用单例模式解决了这个问题。 所以我将mysqli prodecural代码改为mysqli面向对象。
我在这里得到了这个模式: http://www.davecomeau.net/blog/1/Single+Database+Object+in+PHP+5+Using+the+Singleton+Pattern