2017-12-29 3 views
0

私は、メッセージデータベースを使用してメッセージデータを格納するメッセージングWebサイトを作成しています。ただし、同時にユーザーが5人でがオンラインの場合、「MySQLi: Cannot Connect: Too many MySQL connections」で失敗します。PHPがあまりにも多くのMySQLi接続を使用するのを防ぐには?

私のホストHelioHostは最大MySQL接続数を4に制限していると聞いていますが、これは私のエラーを説明しています(詳細はthisを参照してください)。

スクリプトを変更する方法(メッセージフォームの送信時に現在接続しているデータベースをデータベースに追加してから切断する)がサーバー上で最大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; 
} 

任意のアイデア:

ここにいくつかのコードは?右のドキュメントから

+0

あなたはより多くの接続を可能にするホストを取得する必要があるようですが、そうでなければあなたのサイトが普及したら難しくなるでしょう。 – Barmar

+0

@Barmar私は誰かがデーモンのようなコードを思いつくかもしれないと思っていました。これは、他のスクリプトや他のスクリプトからの問い合わせを接続して受け取りますか?これは、より多くの接続の必要性を排除するでしょう – StellarDoor5319

+0

"誰かが来るかもしれない"?これはコード作成サービスではありません。それがあなたの望むものなら、あなた自身で書くべきです。 – Barmar

答えて

1

: - :

<!-- 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 
    ); 

第5ユーザーの場合 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); 

彼はページをリロードする必要があり、あなたはwait.phpような何かに彼をリダイレクトすることができますあなたのコード:

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

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

これはあなたの問題を解決すると思います。 –

+0

これがどのように役立つのか混乱しています。すべてこれはデータベースへの接続を確立することです – Akintunde007

+0

私もです。それは基本的には私の忠実なユーザーに行くことを教えてくれる – StellarDoor5319

1

データベースにアクセスする前にチェックされるキャッシュシステムを構築できます(接続を構築します)。たとえば、データベースから毎回フロントページのニュースを読む必要はなく、頻繁に変更することはありません。そのため、キャッシュシステムからのニュースを(ファイルシステム内のいくつかのファイルのように)読み、そこからデータを表示します。また、ニュースエントリが変更されたときに、キャッシュが削除/無効化されるので、次回の訪問時に再度キャッシュが再構築されます。

関連する問題