PHP MySQL 相同的查询返回不同的行数
Posted
技术标签:
【中文标题】PHP MySQL 相同的查询返回不同的行数【英文标题】:PHP MySQL the same query returns different numbers of rows 【发布时间】:2021-08-17 07:37:54 【问题描述】:我正在使用 php 和 mysql 从数据库中插入和选择数据。昨天我发现了一个新的“错误”,即:我在网站上使用了两次相同的查询——相同的查询——但结果不同
当然我不明白为什么结果不同。甚至行数也不同。只是为了帮助您想象我的错误,我正在使用类似的查询:
$Query = $conn->query("SELECT * FROM `table` WHERE(ID='$id' AND isDeleted = FALSE) ORDER BY Date DESC");
$numRows = $Query->num_rows;
$numRows的值有时大于0,有时0。 重新加载页面后,这些值是否相同。我的意思是...一旦我重新加载页面,它似乎是正确的,但之后当我再次重新加载页面时,错误再次发生(或不发生)。
该站点也用于使用方法- ajax to php 插入数据。为了插入数据,我使用 $conn->prepare();和 $conn->execute();
感谢您的帮助!
【问题讨论】:
你如何确保 $id 每次都是相同的值? 注意:选择你也应该使用$conn->prepare(); and $conn->execute();
(因为SQL injection)
这很简单。再看看这个。有一个查询 ($Query) 并且在页面上我写 echo $Query->num_rows ==> 返回 2 我正在写另一个 html 等等,页面末尾我再次写 $Query->num_rows == > 结果是 0 我没有更改查询
@Luuk 通过使用 prepare 和 execute 我可以将这些值作为相同的值。但是在向这个数据表插入新值后,我的网站会在 1500 毫秒后自动刷新。并且当页面刷新时,此解决方案无法正常工作。我的意思是我再插入 4 行并刷新并显示 1 或 0 个值。刷新页面后没问题,但我必须再次刷新页面。插入和选择之间是否有任何延迟或什么?
问题出在您没有显示的代码中。
【参考方案1】:
尝试打印您的查询,看看 id 的值是否相同。
也许有一个包含文件或脚本正在改变 id 的值? 谢谢
【讨论】:
不。该ID是恒定的。没有什么改变它只是一些行正在使用。我向你展示了我做什么以及什么时候做的。很简单。有一个页面将行打印两次。然后你可以用 JS 向其中插入行。之后,您可以保存新行。 AJAX 向 php 文件发送一个 JSON 字符串。还有 $conn->prepare("INSERT INTO table"); $conn->执行();之后,如果查询成功与否,它会发送请求。如果是,则主页会自行刷新。刷新后,缺少行(有时所有行有时只有少数行)。当您手动刷新页面时,它会起作用。【参考方案2】:找到了解决办法!
我当然会分享它,以防其他人遇到这个问题。后来我发现我的上传脚本的真正问题是:当您通过 PHP 插入数据表时,查询可能会在检查时返回真值(
if($query->execute())
) 但在 sql 中,查询会一一触发,脚本会为您返回 true,这是 true,但是当您选择它太快时,您可能无法获得所有数据。
但是,如果您使用 TRANSACTION,则可以避免此问题,甚至插入更安全!
【讨论】:
以上是关于PHP MySQL 相同的查询返回不同的行数的主要内容,如果未能解决你的问题,请参考以下文章
MySQL Workbench 能否在查询结果网格中显示选中的行数?