如何防止PHP使用过多的MySQLi连接?

如何防止PHP使用过多的MySQLi连接?,php,mysql,Php,Mysql,我正在创建一个消息网站,它使用MySQL数据库来存储消息数据。但是,当同时只有5个用户在线时,它会以“MySQLi:Cannot Connect:Too many MySQL connections”开始失败 我听说我的主机将最大MySQL连接限制为4个,这解释了我的错误(有关详细信息,请参阅) 我想知道如何更改我的脚本(在提交消息表单时当前连接,将其添加到数据库,然后断开连接)最多只能在服务器上使用四个连接 下面是一些代码: // Create connection $conn = new m

我正在创建一个消息网站,它使用MySQL数据库来存储消息数据。但是,当同时只有5个用户在线时,它会以“
MySQLi:Cannot Connect:Too many MySQL connections
”开始失败

我听说我的主机将最大MySQL连接限制为4个,这解释了我的错误(有关详细信息,请参阅)

我想知道如何更改我的脚本(在提交消息表单时当前连接,将其添加到数据库,然后断开连接)最多只能在服务器上使用四个连接

下面是一些代码:

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("MySQL server connection failed: " . $conn->connect_error);
}

//Process data
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_SESSION["username"];
    $parent = $_POST["thread"];
    $content = test_content($_POST["content"]);

    $sql = "INSERT INTO `threads_replies`(`Parent`, `Author`, `Content`) VALUES ('" . $parent . "','" . $name . "','" . $content . "')";
    $conn->query($sql) or die ("Failed MySQL query to save reply");

    echo "Reply saved. <a href=\"viewthread.php?id=" . $parent . "\"><span class=\"fa fa-chevron-circle-left\"></span> Back to Thread</a>";
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
function test_content($data) {
    $data = str_replace("'", "&#39;", $data);
    return $data;
}
//创建连接
$conn=newmysqli($servername、$username、$password、$dbname);
//检查连接
如果($conn->connect\u错误){
die(“MySQL服务器连接失败:”..conn->connect\u错误);
}
//过程数据
如果($\服务器[“请求\方法”]=“发布”){
$name=$\会话[“用户名”];
$parent=$_POST[“thread”];
$content=test_content($_POST[“content”]);
$sql=“插入到'threads'回复中”('Parent'、'Author'、'Content')值(“$Parent.”、“$name.”、“$Content.”);
$conn->query($sql)或die(“MySQL查询保存回复失败”);
回显“已保存回复。”;
}
功能测试输入($data){
$data=修剪($data);
$data=条带斜杠($data);
$data=htmlspecialchars($data);
返回$data;
}
功能测试内容($data){
$data=str_替换(“'”、“';”、$data);
返回$data;
}
有什么想法吗?

就在文档中:

对于第五个用户-他应该重新加载页面,您可以将他重定向到类似wait.php的位置:

<!-- htm, head, please add.. -->
<?php 
// no need in PHP, actually 
?>
<h3>Sorry, having too much users, will reload automatically...</h3>  

<script> 
   setTimeout(
     ()=> location.href = 
       location.href + '?t=' + (new Date()).getTime(), 
     5000 // hope 5 seconds will be enough
   );
文档中的右键:

对于第五个用户-他应该重新加载页面,您可以将他重定向到类似wait.php的位置:

<!-- htm, head, please add.. -->
<?php 
// no need in PHP, actually 
?>
<h3>Sorry, having too much users, will reload automatically...</h3>  

<script> 
   setTimeout(
     ()=> location.href = 
       location.href + '?t=' + (new Date()).getTime(), 
     5000 // hope 5 seconds will be enough
   );


您可以构建一个缓存系统,在访问数据库之前将对其进行检查(并建立连接)。例如,您不需要每次都从数据库中阅读头版新闻,它们不会经常更改。因此,您可以从缓存系统(如文件系统中的某个文件)读取新闻,并显示其中的数据。当新闻条目被更改时,您将删除/使缓存无效,以便下次再次访问时重新生成缓存。

您可以构建一个缓存系统,在访问数据库之前将对其进行检查(并建立连接)。例如,您不需要每次都从数据库中阅读头版新闻,它们不会经常更改。因此,您可以从缓存系统(如文件系统中的某个文件)读取新闻,并显示其中的数据。当新闻条目被更改时,您将删除/使缓存无效,以便下次访问时重新生成(一次)。

您似乎需要一台允许更多连接的主机,否则,如果你的网站变得流行起来,它会变得很困难。@Barmar我在想,有人可能会想出一段类似于守护进程的代码,用于连接其他脚本并从中获取查询,或者类似的东西?这将消除对“某人可能想到”的更多连接的需要?这不是一个代码编写服务。如果这是您想要的,您应该自己编写。您可以使用Beanstalk队列之类的东西来实现应用程序和守护进程之间的通信。@Barmar我不希望有人实际编写代码,只是为了解释如何完成。我对PHPIt不太在行,似乎你需要一台允许更多连接的主机,否则如果你的站点变得流行起来,它会变得很困难。@Barmar我在想,有人可能会想出一段类似于守护进程的代码,用于连接并接受来自其他脚本的查询,或者类似的东西?这将消除对“某人可能想到”的更多连接的需要?这不是一个代码编写服务。如果这是您想要的,您应该自己编写。您可以使用Beanstalk队列之类的东西来实现应用程序和守护进程之间的通信。@Barmar我不希望有人实际编写代码,只是为了解释如何完成。我对PHPI不太在行,我不知道这有什么帮助。所有这些都是建立与数据库的连接我也是。它基本上只是告诉我的忠实用户离开@Akintunde007,它是在解释如何拿起error@StellarDoor5319,如果您无法连接mysqli_connect,那么在您的情况下,这应该是您的maxlimit错误,您当然可以得到最后一个错误,但是如果您没有连接,您会在意吗?结果是一样的,第5个用户应该等到前4个请求完成。@2ppin您能在单独的回答中告诉我怎么做吗?我不知道这有什么帮助。所有这些都是建立与数据库的连接我也是。它基本上只是告诉我的忠实用户离开@Akintunde007,它是在解释如何拿起error@StellarDoor5319,如果您无法连接mysqli_connect,那么在您的情况下,这应该是您的maxlimit错误,您当然可以得到最后一个错误,但是如果您没有连接,您会在意吗?结果是一样的,第五个用户应该等到前4个请求完成。@2ppin您能在单独的回答中告诉我怎么做吗?
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    location('wait.php');
    die("MySQL server connection failed: " . $conn->connect_error);
}