首页 > 解决方案 > Mysql 在发送快速请求时返回相同的行

问题描述

我发现有时 Mysql 会返回完全相同的数据(偶尔)。ig:https ://prnt.sc/10ppiyf

我有一个基本的 Php pdo 查询来为我的分页获取 Mysql 行:

$pdo->query("SELECT * from posts order by id desc LIMIT {$limit} OFFSET {$offset}");

我每 500 毫秒(以测试系统)循环发送总共 1000 个分页请求。我的测试网址是 localhost/test.php?page=1 (页面越来越多地循环到 1000)。应用服务器和数据库服务器在不同的服务器上运行。在这种情况下,请求返回的答案返回相同的行/结果(有时)。

如果 app 和 db 在相同的 Vps 上运行,则每个请求的答案都是唯一的(应该如此)。或者如果我提高了 ms (500 to 1500),那么每个请求的答案都是独一无二的。

我如何理解数据是否重复?Php 将请求数据的答案保存在一个文件中,我检查它(https://prnt.sc/10ppiyf)。

系统详情;

我的测试用例如何工作;

如果你想看我的 php 代码;

// request is sent by me automatically each 500 ms order by order 1,2,3,4
$page = (int) $_GET['page'];
if(!$page or $page == 0)
    $page   = 1;

$perPage        = 10;
$limit          = 10;

$offset         = ($page * $perPage) - $perPage;
    
$pdo            = new PDO('mysql:host=HOST;dbname=db', "user", "userp");
$pdo->query("SELECT * from posts  order by id DESC LIMIT {$limit} OFFSET {$offset}");
$posts          = $stm->fetchAll(PDO::FETCH_ASSOC);

亲爱的有经验的朋友,你的解决方案是什么?

更新:

我在我的网站前面使用 CloudFlare 代理(保护)。如果我禁用 CloudFlare 代理,重复数据的数量会减少。

标签: phpmysql

解决方案


当在用户查看下一行/上一行之间插入或删除行时,就会发生这种情况。

解决办法是避免OFFSET

这是我对此类的讨论:http: //mysql.rjweb.org/doc.php/pagination


推荐阅读