每30秒获取一次表格数据

时间:2016-02-15 04:44:52

标签: php mysql pdo

如何每隔30秒从数据库行获取所有数据,并在30秒显示下一行后只显示一个数据?

目前这是我的查询:

    <?php

    require_once 'dbconfig.php';

    $query = $db_con->query('SELECT * FROM rds ORDER BY news_id DESC');
    $fetch = $query->fetch();
    echo $fetch['message']; 
    ?>

我需要在数据库中显示一条消息,30秒后显示来自数据库的下一条消息

2 个答案:

答案 0 :(得分:0)

您将要执行的操作有两个不同的组件。一个是浏览器中数据的图形表示。这也是从服务器请求新数据的30秒。第二部分是它的要求。如果你希望它每次都不同,那么这部分必须知道它的要求是什么。

我们暂时将它们放在单独的文件中。 Web部件将被称为“web.php”,获取部件将被称为“fetch.php”。以下是“fetch.php”的关键功能:

<?php

require_once 'dbconfig.php';

$row = $_GET['row']+0;

$query = $db_con->query("SELECT * FROM rds ORDER BY news_id DESC LIMIT $row,1");
$fetch = $query->fetch();
echo $fetch['message']; 
?>

这与您的第一个脚本相同,只是现在可以告诉它返回哪个数据库行。可以使用$ _GET获取URL中传递的数据,就像我在这里所做的那样。在这种情况下,如果我要请求URL“fetch.php?row = 7”,$ _GET ['row']的值将为7.

“web.php”包含以下内容:

<div id='content'></div>

<script>
    i = 1;
    setInterval(getdata,30000);
    getdata(){
        microAjax("fetch.php?row="+i,printdata);
        i++;
        }
    printdata(a) {
        document.getElementById("content").innerHTML = document.getElementById("content").innerHTML + "<p>"+a+"</p>";
        }
</script>

<script>function microAjax(B,A){this.bindFunction=function(E,D){return function(){return E.apply(D,[D])}};this.stateChange=function(D){if(this.request.readyState==4){this.callbackFunction(this.request.responseText)}};this.getRequest=function(){if(window.ActiveXObject){return new ActiveXObject("Microsoft.XMLHTTP")}else{if(window.XMLHttpRequest){return new XMLHttpRequest({mozSystem: true})}}return false};this.postBody=(arguments[2]||"");this.callbackFunction=A;this.url=B;this.request=this.getRequest();if(this.request){var C=this.request;C.onreadystatechange=this.bindFunction(this.stateChange,this);if(this.postBody!==""){C.open("POST",B,true);C.setRequestHeader("X-Requested-With","XMLHttpRequest");C.setRequestHeader("Content-type","application/x-www-form-urlencoded");C.setRequestHeader("Connection","close")}else{C.open("GET",B,true)}C.send(this.postBody)}};</script>

这里我们使用setInterval()告诉JavaScript每隔30秒调用一次函数getdata()。它使用MicroAjax,一个非常轻量级的Ajax解析,我将其附加到第二组脚本标记中,以请求数据。 MicroAjax收到数据后,会调用printdata(),将其添加到HTML的末尾。

如果你添加JQuery,它当然会让事情变得更好。这些只是基础知识,即使添加CSS后它们看起来会略有不同,但它们仍然适用。最后,这就是许多优秀的网站现在所做的事情,而不是重新加载或传递给另一个页面;他们只是使用AJAX来获取新内容。

根据您打算做的其他事情,您可能希望切换AJAX库。我刚刚使用MicroAjax,因为它体积小,重量轻,我可以直接将其复制到脚本中(Google似乎已经删除了他们曾经拥有的页面,因此我找不到CDN)。

希望这有帮助。

答案 1 :(得分:0)

您可以从数据库中选择随机消息,并在每30秒后使用Ajax调用显示它。我认为这篇文章可以帮助您jQuery - Call ajax every 10 seconds 您可以将设置间隔中的时间更改为30秒 或者,您可以为显示的消息设置任何状态,并选择那些未显示的消息。使用查询:

$ sql =&#34; SELECT * FROM rds WHERE&#39; status&#39; = 0 ORDER BY news_id DESC LIMIT 1&#34;