如何检查mysql上是否有新数据

时间:2012-04-18 04:59:20

标签: javascript php mysql

我需要编写一个应用程序,每隔10秒检查一次来自外部服务器的数据库,看是否有新数据。目前我有一个javascript,通过比较两个JSON(旧的JSON和从服务器获取的新)以及是否有警报用户来检查数据是否已更改服务器。但这不是我在这个应用程序中所需要的。只有在数据是新的时候才会提醒用户,而不是在数据发生变化时。

我想也许我可以使用查询MYSQL的PHP​​代码执行此操作,如果查询num_results为0循环,则在用户收到通知时,num_results大于0。在这个应用程序中,只要用户获得新数据,用户是否可以在0,1秒或10秒内使用它并不重要。这就是我尝试进行MYSQL检查的方法,但它不起作用:

<?php
include 'config.php';

if(isset($_GET['ID'])) {
    $maxLoop = 20;    
    while($maxLoop--) {
        $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        try {
            $sth = $dbh->prepare('select * from testit where id = :id');
            $sth->bindParam(':id',$_GET['ID'],PDO::PARAM_INT);
            $sth->execute();
            if($sth->rowCount()>0) {
                $results = $sth->fetchAll(PDO::FETCH_OBJ);
                echo '{"key":'. json_encode($results) .'}';
                exit; // Found new data, end loop and script
            }
        } catch(PDOException $e) {
            break;   
        }
        sleep(3);    
    } // end while
} // end if

那么如何更改此代码以使其工作,或者我应该尝试编写一些可以执行此操作的JavaScript?如果是这样,我如何检查数据是否是新的,而不仅仅是检查它是否已经改变?

2 个答案:

答案 0 :(得分:3)

如何录制'新'数据?有时间戳吗? auto_increment主键字段?

最简单的轮询方法是简单地跟踪上一个已知的id /时间戳,看看是否有更高ID /更新时间戳的内容。

原样,你的方法效率很低。您选择表中的所有记录,强制mysql / pdo开始从磁盘中获取该数据等...然后在获取行计数后将其丢弃。一个更有效的方法是select count(*) ...并检查该值。这使得mysql不必开始从磁盘中获取实际的行数据。在某些表类型(特别是myisam)上,count(*)操作非常快。

答案 1 :(得分:1)

如果您希望应用程序每10秒检查一次更改,则必须使用AJAX向服务器上的php文件发出asyncronous个请求。在php文件中,您只需要select * from testit where condition=false,您就可以获得&#34;新数据&#34;。这是一个链接,您可以从中学习AJAX的基础知识: http://www.w3schools.com/ajax/default.asp