簡體   English   中英

如何防止PHP使用過多的MySQLi連接?

[英]How to prevent PHP using too many MySQLi connections?

我正在創建一個消息傳遞網站,該網站使用MySQL數據庫存儲消息數據。 但是,當同時只有5個用戶在線時,它將開始失敗,並顯示“ MySQLi: Cannot Connect: Too many MySQL connections ”。

我聽說我的主人, HelioHost ,限制最大的MySQL連接到四個,這也解釋了我的錯誤(見這個細節)。

我想知道如何更改腳本(提交消息表單時當前連接,將其添加到數據庫中,然后斷開連接)只能在服務器上最多使用四個連接。

這是一些代碼:

// 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;
}

有任何想法嗎?

從文檔開始: http : //php.net/manual/en/function.mysqli-connect.php

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

if (!$link) {
    $error = mysqli_connect_error();
    echo "Failed to connect to MySQL: $error";
    echo 'Sorry, pal, 5 already playing around...';    
    exit;// or location('wait.php');
}
# .... 
mysqli_close($link);

對於第5位用戶-他應該重新加載頁面,您可以將他重定向到類似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
   );

所以你的代碼:

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

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

您可以構建一個緩存系統,在訪問數據庫之前將對其進行檢查(並建立一個連接)。 例如,您不需要每次都從數據庫中讀取首頁上的新聞,它們不需要經常更改。 因此,您改為從緩存系統中讀取新聞(例如文件系統中的某些文件),並顯示其中的數據。 當新聞條目已更改時,您將刪除/使緩存無效,以便下次訪問時再次重建(一次)緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM