javascript - 如何查看mysql上是否有新数据

标签 javascript php mysql

我需要编写一个应用程序,每 10 秒从外部服务器检查一次数据库,看看是否有新数据。目前我有一个 javascript,它通过比较两个 JSON(旧 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?如果是这样,我如何检查数据是否是新的,而不是仅仅检查它是否已更改?

最佳答案

如何记录"new"数据?有时间戳吗?一个 auto_increment 主键字段?

最简单的轮询方法是简单地跟踪最后一个已知的 ID/时间戳,看看是否有任何具有更高 ID/更新时间戳的东西。

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

关于javascript - 如何查看mysql上是否有新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10203050/

相关文章:

javascript - `Function` 上的 `window` 标识符有什么意义?

php - 如何使用 jQuery 获取上传输入的 "value"

php - 如何使用 PDO (mysql) 正确调试 Insert 语句?

php - 当没有返回行时检索 MySQL 列名

Mysql 包含没有针对特定日期返回行的列

Javascript 插件/片段组合器

javascript - Spark 中的Python mapraduce

javascript - 如何使用传入Rhino javascript引擎的ArrayList java对象?

php - jquery ui 可选择的复选框

php - 如何设置它以便不必上传表单中的文件即可将表单的其余数据插入 mysql 数据库?