PHP中的MySQL查询给出了明显的错误结果

Posted

技术标签:

【中文标题】PHP中的MySQL查询给出了明显的错误结果【英文标题】:MySQL query in PHP gives obvious wrong result 【发布时间】:2010-10-13 09:40:12 【问题描述】:

我正在使用 php 和 PHPMyAdmin 创建一个小型个人资料网站。 我正在给成员一个 ID 号,根据它是数据库中当前最大的数字,+1

在获得我想要的 PHP 脚本之前,我进行了 25 次测试。

然后我使用 PHPMyAdmin 删除了这 25 个条目。

但是现在,当我的 PHP 代码这样做时:

function getLatestID() 
    $query = "SELECT max(member_id) FROM members";
    $result = @mysql_query($query) or showError("unable to query database for user information");
    if (!($record = mysql_fetch_array($result))) return null;
    return $record[0];

我打错号码了。

测试场景:数据库表包含 3 个条目,ID 分别为 1、2 和 3。

我开始调试会话并在返回 $record[0] 上放置一个断点。 我检查了它的内容,最大的数字不是 3,而是 28。

和 25+3=28 一样,我已经删除的 25 个条目...

有人知道是什么原因造成的,我该如何解决?

【问题讨论】:

【参考方案1】:

这可能是因为您设置了 auto_increment 并且查询返回了最高 id。当您删除其他记录时,您可能没有重置自动增量计数。

【讨论】:

以后,如果您还没有弄清楚这一点,您可以通过转到任何给定表的“操作”选项卡来重置它。【参考方案2】:

如果您在 MySQL 中使用 auto_increment,则删除记录不会减少下一个值。

您可以使用 TRUNCATE TABLE mytable 清空表 - 这将重置值。

【讨论】:

谢谢,解决了。太糟糕了,截断命令会删除所有值。我很幸运只有 3 个条目可以替换。想象成千上万的条目。现在我明白了为什么人们通常不从他们的表格中删除条目。 @Vordreller:废话;从表中删除条目很好。期望 AUTO_INCREMENT ID 奇迹般地重新计算自己并不是,并且依赖它实际上表明设计失败。它是“AUTO_INCREMENT”,而不是“AUTO_MAX”。【参考方案3】:

您还可以更改自动增量认为是下一个要分配的值:

ALTER TABLE members AUTO_INCREMENT = 3;

请注意,如果您在自动增量列中输入的值小于当前最大值,则会将该值更改为 MAX+1。要查看当前设置的下一个值,请执行以下操作:

SHOW CREATE TABLE members;

在表定义的末尾,它会显示“AUTO_INCREMENT = 26”或者它的当前值。

【讨论】:

以上是关于PHP中的MySQL查询给出了明显的错误结果的主要内容,如果未能解决你的问题,请参考以下文章

PHP · MySQL函数

MySql 限制和偏移量给出错误的结果

由于只有完整组的模式,MySQL查询给出错误结果[重复]

mysql 将多个查询结果合并成一行

mysql pdo查询结果 int 变成结果string 解决

我如何在 php 中从 mysql 查询结果组按日期给出符号(如更改颜色或 fa-up/fa-down)