有一个名为 function.php
的文件,我使用 require_once
将它调用到我网站的所有页面中。该文件包含一百多个函数。
我从 mysqli_connect()
得到 max_user_connections
错误,紧接着
mysqli_query() expects parameter 1 to be mysqli, boolean given
error shown when there are too many visitors or search engine bots are crawling fast.
The function file is like this:
<?php
function db_connect(){
$link=mysqli_connect("host","dbuser","dbpass","dbname");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($link,"set names 'utf8'");
}
db_connect();
function func_1(){
$result=mysqli_query($link,"select * from ...");
...
}
function func_2(){
$result=mysqli_query($link,"select * from ...");
...
}
.
.
.
function func_100(){
$result=mysqli_query($link,"select * from ...");
...
}
?>
最后我关闭了数据库连接。因为我已经检查过我的数据库的每个用户的最大连接数是 50 并且主机提供商不会更改它(他们说这已经足够了)。
那么,通常我该如何处理这个问题? (简单的 PHP 或 OOP)
最佳答案
在处理每个网页请求的过程中,您显然打开了多个到 MySQL 服务器的连接。
在代码文件中定义 db_connect()
函数之后,您可以立即调用该函数。这可能导致它被调用得比必要的更频繁。每次调用它时,它都会消耗连接池中的稀缺资源。
相反,做一些工作以确保处理每一页的代码最多调用一次该函数。最好将 MySQL 连接作为处理逻辑的一部分进行管理,而不是依靠 require_once
为您完成。确保在使用完后关闭打开的连接。
当您确定每个正在处理的页面最多打开一个 MySQL 连接时,您可能需要减少您的网络服务器可以同时处理的 php 文档的数量。这可以通过调整 Apache Web 服务器参数 MaxClients
和/或 MaxRequestsPerChild
来完成。另一个流行的网络服务器 nginx 也有类似的参数。减少此容量不会损害您的用户,因为网络服务器处理来自队列的页面请求。
关于php - 如何在不增加最大连接数的情况下处理 PHP 中过多的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399662/