簡體   English   中英

PHP Mysqli 數據庫連接池以避免最大用戶數

[英]PHP Mysqli database connection pooling to avoid maximum user count

我這兩天在網上沖浪,用PHP創建數據庫池,但還沒有實現。 我正在使用 PHP 和 MySQLi。 我們購買了具有 15 個最大用戶連接的 mysqli 數據庫。 我想對數據庫連接進行池化以避免新連接。 我使用了persistent以及mysqli_connect 但我覺得創建新連接並沒有太大不同,因為其他用戶已經登錄。我正在嘗試使用此功能來獲取DB連接。

 <?php
function getConnection(){
    if ($connect){
        return $connect;
    }else{
        $connect = new mysqli('p:xxxx','yyy','zzz','aaaa');
        return $connect;
        if(mysqli_connect_errno($connect))
        {
            echo "Server Busy";
        }
    }
}
 ?>

但上面的函數只返回 else 部分。 請建議我如何處理這個問題。 提前致謝。 現在我正在終止處於睡眠模式的進程以減少增加數據庫連接的可能性。

PHP 中沒有連接池。

您嘗試使用的持久連接(即“p:”位)是達到最大連接數的最可靠方法,因此請立即擺脫它。

15 個並發連接實際上很多。 只需優化您的查詢,那么典型的連接將持續 0.1 秒,這意味着 150 個並發執行的 PHP 腳本相當於 1500 個在線用戶。

此外,您還需要添加

static $connect;

作為函數中的第一行,或者每次調用時都會創建新連接,這就是您收到此錯誤的實際原因。

<?php
function getConnection(){
    static $connect;

    if (!$connect){
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $connect = new mysqli('xxxx','yyy','zzz','aaaa');
        $connect->set_charset('utf8mb4');
    }
    return $connect;
}

更好的是,完全去掉這個函數,使用 mysql 連接代碼創建一個單獨的文件,然后在你的代碼周圍使用$connect變量。 有關詳細信息,請參閱我關於mysqli connect 的文章。

這不是它的工作原理。 這里 當您執行new mysqli('p:...連接是持久的,而不是 PHP 對象時,MySQLi 將選擇可用連接之一。

function getConnection(){
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    return (new mysqli('p:xxxx','yyy','zzz','aaaa'));
}

暫無
暫無

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

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