如何在PHP中使mysql查询不断刷新?

2023-11-30

我正在制作一个基本的聊天室。我的代码:

$conn = ("127.0.0.1","root","","mymessages");

$stmt = "SELECT * FROM posts ORDER BY timestamp LIMIT 100";
$result = mysqli_query($conn, $stmt);

if(!$result) {
    echo("Query failed" . mysqli_error());
}

while ($row = mysqli_fetch_assoc($result)) {
    $messagefname = $row['fname'];
    $messagelname = $row['lname'];
    $subject = $row['subject'];
    $content = $row['content'];
    $day = $row['day'];
    $month = $row['month'];
    $year = $row['year'];
    $hour = $row['hour'];
    $min = $row['minute'];


    echo("<font size='1.5' face='Arial'>");
    echo("Sent by " . $messagefname . " " . $messagelname . " at " . $hour . ":" . $min. " on " . $day . "/" . $month . "/" . $year . "<br>");
    echo("</font><br><font size='4' face='Arial'><b>");
    echo($subject);
    echo("</font><br><font size='3' face='Arial'></b>");
    echo($content);
    echo("</font><br><br><hr><br>");
}

每次刷新页面时,都会更新,并且自上次刷新以来添加的任何记录都会添加到列表中。在聊天室中,这并不理想,那么有没有一种方法可以不断检查新记录,同时尽可能减少对用户的干扰?谢谢!


您陷入了对当前技术堆栈进行轮询的困境。 MySQL 没有任何好的方法来向您推送有新内容可供查看的通知。

(您可以考虑添加消息队列子系统,例如 RabbitMQ,但这需要对应用程序的结构进行重大更改)。

以尽可能低的成本处理轮询的一些准则。

  1. 将用户期望的消息延迟设置为几秒而不是几毫秒。

  2. 根据需要经常查询以满足延迟预期。

  3. 避免每次查询都查询大量数据。你怎么能这么做呢?

    A。每当运行查询时保存最近的时间戳

    b.不要使用SELECT *。相反,请提供您实际需要的列的名称。这使得 MySQL 的优化器可以帮助降低查询成本。

    C。让您的查询成为可能SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp所以你只能从你的桌子上按顺序得到新的物品。如果您的系统不是很繁忙,这些 SELECT 通常不会返回任何行。那挺好的。

    d.确保您的 SELECT 语句中的时间戳和其他列有多列索引。这被称为覆盖指数.

    e.打开与 MySQL 的连接后,立即发出此 SQL 语句。它允许 MySQL 获取您的数据,同时减少与其他 MySQL 客户端向表中插入行的争用。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

如果您通过用户浏览器使用 AJAX 执行此操作,则需要在 AJAX 请求中包含最新时间戳,以便可以向每个用户的浏览器提供所需的新项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在PHP中使mysql查询不断刷新? 的相关文章

  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • PHP cURL 看不到 /etc/hosts 文件

    我在让 PHP cURL 库识别我在我的文件中创建的别名时遇到了麻烦 etc hosts file 这就是我的 etc hosts现在归档 192 168 0 20 www example dev 在另一端 192 168 0 20 Apa
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • 如何绑定值 INSERT INTO mysql perl

    我有下面的代码可以工作 但我需要知道如何绑定它们以确保安全 如果我只是将 new row 替换为 并将其放入执行中我收到错误 感谢您的帮助 foreach my field account field order new row param
  • jQuery:将文本区域滚动到给定位置

    我有一个包含很多文本的文本区域
  • 从 URL 任何文件类型创建图像

    我知道imagecreatefromgif https www php net manual en function imagecreatefromgif php imagecreatefromjpeg https www php net
  • Yii2 组件将数据传递给 __construct

    我有一个库 我想将其用作组件 在配置文件中我这样设置 components gt superLib gt class gt SuperLib construct gt first second Maybe Yii 2 have proper
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 致命错误 - 未找到“Mongo”类

    我正在尝试执行此操作 但我收到以下错误 致命错误 在 C wamp www 中找不到类 Mongo Info PHP 5 38 MongoDB mongodb win32 i386 2 0 2 MongoDB PHP 驱动程序 mongo
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • Laravel 4.2 Composer 安装错误:“无法扫描类”

    我想通过 Composer 在新的 Laravel 4 2 安装上安装一些软件包 但是 我遇到了例外 这是我的作曲家文件 name laravel laravel description The Laravel Framework keyw
  • WordPress 子主题包括包含文件

    我在一家WordPress使用 AMPPS 作为本地主机在我的本地计算机上进行设置 使用 Delta 主题 我创建了一个子主题 delta2 child 初始设置效果很好 但是 我需要更改包含文件夹中名为 home slider php 的
  • 如何更新 MySQL 数据库中的两列?

    这不起作用 UPDATE customers SET firstname John AND lastname Smith WHERE id 1 用逗号分隔值 AND是一个逻辑运算符 它的位置是WHERE and ON条款 UPDATE cu
  • 如何在 TypeScript 中使用 navigation.replace ?

    我试图在我的代码中使用它 const navigation useNavigation navigation replace AllFriends 但我不断收到错误消息 Property replace does not exist on
  • 如何跨多个文件跨越 javascript 命名空间?

    我永远忽略了javascript 几年前我开始使用 jQuery 这样我就可以过得去 但随着我开始更多地进行 TDD 我昨天决定真正深入研究 javascript 之后可能还有咖啡脚本 在我的 ASP NET Web 窗体应用程序中 我有很
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro

随机推荐

  • 是否可以连接两个或多个 WiFi Direct 组?

    我目前正在为我正在进行的一个项目尝试 WiFi Direct WiFiP2p 并想知道是否可以在组之间创建桥梁 从而将它们连接在一起 基于白皮书由 WiFi 联盟发布 这应该是可能的 尽管 P2P 规范没有描述此功能的机制 实施是特定于供应
  • 无法推送到 Bitbucket 上的 Git 存储库

    我创建了一个新的存储库 但遇到了一个奇怪的错误 我以前在 Bitbucket 上使用过 Git 但我刚刚重新格式化 现在似乎无法让 Git 工作 提交后 我必须将我的电子邮件和姓名添加到全局变量中 但随后它就正常提交了 当我尝试使用该命令时
  • Android - 配置 Spinner 使用数组

    我通过以下方式声明我的 Spinner 它非常静态 所以我 有 2 个字符串数组array xml对于标题和值
  • 如何每 30 秒清空 Guava 缓存,同时将其发送到另一个方法?

    我通过调用从多个线程填充我的番石榴缓存add方法 现在 从每 30 秒运行一次的后台线程中 我想将缓存中的所有内容发送到sendToDB原子方法 下面是我的代码 public class Example private final Sche
  • 向多维数组添加元素

    如果我像这样定义一个多维javascript数组 var myStack new Array 3 edit var myStack 一次插入一个值的最佳方法是什么 myStack 1 1 0 myValue 我想读取数据库并一次写入一个值
  • python中的逆正态随机数生成?

    我过去曾使用 random normal 来生成一个数字 如果多次调用该数字 总计将创建一个钟形曲线分布 我现在想做的是创建相反 逆的分布 其中分布偏向某个范围内的极端 excel中有一些内置函数似乎可以满足我的要求 有没有办法在 pyth
  • Date.parse() 在 IE 8 中不起作用

    功能简单Date parse 工作不顺利互联网浏览器 8 我在用Date parse 验证日期格式 MM DD YYYY isNaN Date parse 99 99 9999 return true 日期无效 isNaN Date par
  • 导出/导入 OWASP ZAP 被动扫描规则

    有没有办法为被动扫描创建扫描策略 我知道您可以为主动 攻击扫描创建和修改扫描策略 但我想知道您是否可以对被动扫描规则执行相同的操作 或者是否必须在每台计算机上单独修改它们 有一个现有的票证可以在单一策略类型界面中统一主动 被动扫描处理 ht
  • 服务器端 Flash 功能测试

    我正在开发一个 ASP NET 网站 需要支持非 Flash 用户 如果用户的浏览器不支持 Flash 或者禁用了 Flash 我想将大的启动图像下载到浏览器 但是我不想浪费带宽来下载它 如果 Flashdoes正确渲染 那么是否可以使用
  • 从另一个 Glassfish(Web-Container)访问另一个 Glassfish(EJB-Container)中运行的远程 EJB

    我想使用两台独立的服务器 一台用于 Web 容器 一台用于 ejb 容器 这两个容器都是 Glassfish V3 但是 如何在我的 Web 项目中使用 EJB 注释来访问远程 ejb container 的 ejb 在 Ejb 2 0 中
  • 在终端上切换 GitHub 帐户时遇到问题

    自从我将任何东西推送到 GitHub 以来已经有一段时间了 我最初在计算机上设置了帐户 一切运行良好 然后我将我的帐户更改为客户的帐户 这样我就可以将代码推送到他们的私人存储库 已经有一段时间了 现在我要改回旧帐户 但遇到了麻烦 我生成了一
  • 当上游有事件时,为什么有一个可用的“事件”变量而没有定义?

    我今天偶然发现了一个奇怪的行为 基本上 我有一个绑定到 knockout js 单击事件的函数 该函数利用了淘汰事件 但没有明确将其作为参数 this myClickHandler function console log event ev
  • 从子字符串中包含特定字符的字符串中提取单词

    在 MS Excel 中 我想使用公式从文本中包含特定字符 的单元格中仅提取单词 A2 多莉给我做了一个自制的蛋糕和一些松饼 A3 晚餐我们吃了奶酪 蛋糕 A4 每个人都喜欢面包店制作的美味 蛋糕 A5 约翰尼昨晚自己做了晚餐 然后打扫了厨
  • xlink 的 jQuery 选择器

    a xlink href coastline attr class grey a xlink href onshore attr class blue light 这就是我目前必须选择具有 xlink 的每个项目 coastline然后把它
  • 有没有办法很好地去除标签?

    有没有办法隐藏这个标签栏 附 不确定这个问题是否属于 stackoverflow 好的 我自己通过编写 VS 扩展来完成此操作 还将标题栏和菜单栏切换为自动隐藏 现在我的 VS 终于有了一个简约的视图 GitHub VS画廊
  • 如何在字典中打印换行符?

    我正在尝试通过字典创建一个查询 如下所示 Name name ID id Date of Birth dob 第二name是用户通过 raw input 输入的预设值 同样对于id和dob 这是我当前的代码 students id nNam
  • 是否可以预先评估 bash 的 PS1 中的值?

    我正在尝试构建一个 Bash 提示符 其中包含我的 git 分支信息 使用 git 的 bash completion 中的 git ps1 和一个小彩色笑脸来指示最近运行的命令是否成功 笑脸是使用这种技术创建的 我在这里找到了这样的技术
  • 如何使用 jquery mobile 创建 100% 高度的 div?

    如何创建 id test 高度为 100 的 div div div h1 Title h1 div div div div div div
  • OptaPlanner,Score计算速度会太低

    运行我的 optaplanner 项目并得到以下输出 看来有两个问题 这些输出是什么意思 第一个是 Score calculation speed will be too low because move thread s destroy
  • 如何在PHP中使mysql查询不断刷新?

    我正在制作一个基本的聊天室 我的代码 conn 127 0 0 1 root mymessages stmt SELECT FROM posts ORDER BY timestamp LIMIT 100 result mysqli quer