2013-03-27 66 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