Javascript 如何检查mysql上是否有新数据
我需要编写一个应用程序,每10秒检查一次来自外部服务器的数据库,看看是否有新数据。目前,我有一个javascript,它通过比较两个JSON(旧JSON和从服务器获取的新JSON)来检查数据是否已更改服务器,以及是否已向用户发出警报。但这不是我在这个应用程序中需要的。仅当数据是新数据时,而不是数据已更改时,才应提醒用户 我在想,也许我可以用一个PHP代码来查询MYSQL,如果查询num_结果为0,则循环,直到用户收到通知时num_结果大于0为止。在这个应用程序中,新数据是否在0、1秒或10秒内可供用户使用并不重要,只要用户得到它就行。这就是我尝试执行MYSQL检查的方式,但它不起作用:Javascript 如何检查mysql上是否有新数据,javascript,php,mysql,Javascript,Php,Mysql,我需要编写一个应用程序,每10秒检查一次来自外部服务器的数据库,看看是否有新数据。目前,我有一个javascript,它通过比较两个JSON(旧JSON和从服务器获取的新JSON)来检查数据是否已更改服务器,以及是否已向用户发出警报。但这不是我在这个应用程序中需要的。仅当数据是新数据时,而不是数据已更改时,才应提醒用户 我在想,也许我可以用一个PHP代码来查询MYSQL,如果查询num_结果为0,则循环,直到用户收到通知时num_结果大于0为止。在这个应用程序中,新数据是否在0、1秒或10秒内可
<?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的每一行都被视为“新数据”。我需要为用户显示所有数据,而不仅仅是行数。