PHP:每隔10秒检查一次mysql数据库中是否有任何新行


PHP: Check mysql database every 10 seconds for any new rows

我正在进行php聊天,并开始php检查数据库部分。因此,当用户在聊天中键入内容时,它会被记录在MySQL数据库中,我如何每10秒检查一次数据库,以便一个用户的聊天会用其他用户的新消息更新。我知道您可以对一个有间隔的页面使用ajax请求,但我希望php位于同一页面上,而不必使用多个页面。这是用于检查数据库的代码

<?php
$con = mysqli_connect('host','user','pass','database');
$query = mysqli_query($con,"SELECT * FROM `messages`");
while ($row=mysqli_fetch_assoc($query)) {
 $user = $row['user'];
 $message = $row['message'];
 echo 'User: ',$user,' Message: ',$message;
}
?>

提前感谢任何人!

使用MySQL事件调度程序。

下面的链接将引导您完成。

http://www.9lessons.info/2012/10/mysql-event-scheduler.html.

我认为对你们来说是最好的选择。

AJAX可能是最简单的解决方案。如果你真的想的话,你可以在执行PHP代码的同一页面上执行AJAX请求
(function check() {
    $.get('mypage.php', function(data) {
        doSomethingWith(data);
        setTimeout(check, 5000); // every 5 seconds
    });
})();

PHP没有setInterval函数。虽然我确信您可以使用crontask在服务器上实现自动化,但您也可以使用一些简单的Javascript来实现这一点。

您试图实现的概念被称为"短轮询"。您想要做的是在Javascript中有一个setInterval函数,该函数不断向您的PHP文件发出AJAX请求,该文件执行对数据库的新消息检查。PHP应该将这些信息返回到脚本中,然后可以简单地填充用户的屏幕。

还有Long Polling,您只需维护连接并使用setTimeout等待消息传入。您可以自己查找更多信息,如果有问题,可以返回此处。

一个关于这个的好视频:

https://www.youtube.com/watch?v=wHmSqFor1HU

希望这能有所帮助。

这正是您所需要的。我们需要设置ajax自动重新加载的时间。不要把所有东西都放在一页纸上。因为必须重新加载页面才能刷新数据。这是一个糟糕的解决方案。

调用jQuery Ajax Request Each X Minutes

等待30秒,并每秒检查数据库,一旦你发现一条记录正在被破坏,当30秒到期时也会被破坏。

$sec = 1;
while($sec <= 30) {
   if(has record)
      Send to the user;
   $sec++;
   sleep(one sec here);
}

使用睡眠10秒,以便每10秒检查一次。。。