gpt4 book ai didi

php - 如何在不增加最大连接数的情况下处理 PHP 中过多的数据库连接?

转载 作者:可可西里 更新时间:2023-11-01 07:45:37 24 4
gpt4 key购买 nike

有一个名为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com