2013-03-27 70 views
0

我需要不斷地從我的數據庫中讀取每1秒,以獲得最新的值。這裏是我的代碼:PHP常量SQL查詢

<?php 
    // connect to the "tests" database 
    $conn = new mysqli('localhost', 'root','','Test'); 

    // check connection 
    if (mysqli_connect_errno()) { 
    exit('Connect failed: '. mysqli_connect_error()); 
    } 

    // SELECT sql query 
    $sql = "SELECT * FROM `Value`"; 

    // perform the query and store the result 
    $result = $conn->query($sql); 

    if (!$result) 
    print 'Error!'; 

    // if the $result contains at least one row 
    if ($result->num_rows > 0) { 
    // output data of each row from $result 
    while($row = $result->fetch_assoc()) { 
     $output=$row; 
    print_r($output); 
    } 
    } 
    else { 
    print '0 results'; 
    } 

    $conn->close(); 
    ?> 

我的HTML代碼刷新每1秒鐘如下:

function reload(){ 
    setInterval(getData,1000); 
} 

function getData() 
    { 
    $.get('test.php', function(data) { 

     var output = data; 

     document.getElementById("output").innerHTML = "Info: " + output; 
    }); 
    } 
.... 
<body onload="reload();"> 

<p id="output"></p> 

</body> 

一切工作正常,但大約5-10分鐘的MySQL服務器崩潰後。我假設它正在超載。我的想法是,我每次連接每一秒都運行php腳本。我做錯了嗎?任何人都有更好的實施建議?

+2

任何在你的錯誤日誌

在mysqli的,你可以通過加入對前面加上主機名?/var/log/mysql/... – 2013-03-27 05:52:07

+0

表'Value'中有多少行? – hjpotter92 2013-03-27 05:54:39

+3

如果您每秒連接一次並斷開連接可能會影響性能,則可以保持連接處於打開狀態,這可能會有所幫助 – Bhadra 2013-03-27 05:54:47

回答

0

您可以嘗試具有回調像這樣調用setTimeout()直到最後一個人在1秒鐘完成它無法啓動下一個請求:

function getData() 
    { 
    $.get('test.php', function(data) { 

     var output = data; 

     document.getElementById("output").innerHTML = "Info: " + output; 
     setTimeout(getData, 1000); 
    }); 
    } 
.... 
<body onload="getData();"> 

這通常比使用setInterval()一個更好的辦法,因爲你最終可能有兩個併發連接,並要求A可以請求B前啓動,但之後B可能結束,因爲發生什麼事,花了超過一秒完成請求。這可能會導致一些奇怪的行爲。

這也可以解決您的問題,因爲,因爲它最終有來自同一個IP打開幾個併發連接可能失敗等

0

是的,它可以是一個更好的方法實現。 當您使用相同Database connection configuration的每次,有不需要連接和頁面刷新關閉數據庫。 連接到數據庫服務器的每一個,第二個是非常昂貴的調用

你爲什麼不just reload/refresh the query statement

的理念是:

使用Persistent Database Connection

參考布拉姆答案在下面post知道爲什麼持久連接是最優的。

放在一個單獨的DIV的疑問說#load。

 echo '<div id="load">'; 
// SELECT sql query 
    $sql = "SELECT * FROM `Value`"; 

    // perform the query and store the result 
    $result = $conn->query($sql); 

    if (!$result) 
    print 'Error!'; 

    // if the $result contains at least one row 
    if ($result->num_rows > 0) { 
    // output data of each row from $result 
    while($row = $result->fetch_assoc()) { 
     $output=$row; 
    print_r($output); 
    } 
    } 
    else { 
    print '0 results'; 
    } 
     echo '</div>'; 

使用jQuery功能刷新僅#load DIV

<script type="text/javascript"> 
var auto_refresh = setInterval(
function() 
{ 
$("#load").load("filename.php #load"); 
}15000); // refresh every 1 second 
</script> 

我已經實現了這個自動刷新排行榜page.It非常完美和服務器沒有崩潰,甚至在50個小時

+0

請張貼downvote的原因? – 2013-03-27 06:24:57

+1

這不會使MySQL連接保持活動狀態。它每刷新一次仍會產生新的連接。世界上最好的程序員的答案是正確的。 – Paulpro 2013-03-27 06:40:56

+0

謝謝@Paulpro。我意識到自己的錯誤並更新了我的答案。 :) – 2013-03-27 06:53:34