Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查mysql上是否有新数据_Javascript_Php_Mysql - Fatal编程技术网

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

Javascript 如何检查mysql上是否有新数据,javascript,php,mysql,Javascript,Php,Mysql,我需要编写一个应用程序,每10秒检查一次来自外部服务器的数据库,看看是否有新数据。目前,我有一个javascript,它通过比较两个JSON(旧JSON和从服务器获取的新JSON)来检查数据是否已更改服务器,以及是否已向用户发出警报。但这不是我在这个应用程序中需要的。仅当数据是新数据时,而不是数据已更改时,才应提醒用户 我在想,也许我可以用一个PHP代码来查询MYSQL,如果查询num_结果为0,则循环,直到用户收到通知时num_结果大于0为止。在这个应用程序中,新数据是否在0、1秒或10秒内可

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

我在想,也许我可以用一个PHP代码来查询MYSQL,如果查询num_结果为0,则循环,直到用户收到通知时num_结果大于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

如何记录“新”数据?有时间戳吗?自动递增主键字段

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


实际上,你的方法效率很低。选择表中的所有记录,强制mysql/pdo开始从磁盘获取数据,等等。。。然后在得到行数后简单地扔掉它。一种更有效的方法是执行
选择count(*)…
并检查该值。这使得mysql不必开始从磁盘获取实际的行数据。对于某些表类型(特别是myisam),计数(*)操作非常快速。

如果希望应用程序每10秒检查一次更改,则必须使用
AJAX
对服务器上的php文件发出
异步
请求。在php文件中,您只需
从testit中选择*,其中condition=false
,即可获得“新数据”。这里有一个链接,您可以从中学习AJAX的基础知识:

表中有一列名为“条件”。所以应用程序应该检查是否有条件为false的行。如果有,应该打印出来。当用户看到这些行时,他们按下一个按钮,将值从false更改为true。因此,条件为false的每一行都被视为“新数据”。我需要为用户显示所有数据,而不仅仅是行数。