简单的mysql查询只返回一行

Posted

技术标签:

【中文标题】简单的mysql查询只返回一行【英文标题】:Simple mysql query only returning one row 【发布时间】:2009-07-21 21:24:07 【问题描述】:

我有下表:

CREATE TABLE IF NOT EXISTS `notes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(10) unsigned NOT NULL DEFAULT '0',
`note` text,
PRIMARY KEY (`id`)
)

INSERT INTO `notes` (`id`, `uid`, `note`) VALUES
(1, 1, 'noteteeext'),
(2, 1, 'notenotenotenote');

如您所见,我有 2 行 uid=1 但它只返回 1 行! (第二个)

$sql = "SELECT id,uid,note
                    FROM notes
            WHERE uid = 1";
$result = mysql_query($sql);


while ($row = mysql_fetch_assoc($result)) 
 echo $row['note'];

怎么了? :/

【问题讨论】:

你在哪里定义 $result?你能补充一下吗? mysql_num_rows($result) 返回什么? 您是否尝试过直接在数据库上运行查询(或通过 phpMyAdmin)? +1 ...解决问题时,如果可以,请删除软件层! @hobodave :O 它返回所有行。嗯 【参考方案1】:

您确定在您正在运行的实际代码中的 while 循环之前肯定没有 $row = mysql_fetch_assoc($result) 吗?

如果您在上面发布的代码正是您正在运行的代码,这显然不是问题,但这将是导致此行为的最常见原因。

【讨论】:

刚刚又检查了一次代码,猜猜你是对的……抱歉浪费了大家的时间。大声笑 干得好!还...这说明了为什么您可以在 PHP 之外进行故障排除,例如 phpMyAdmin 或 MySQL 查询浏览器。【参考方案2】:

没有看到任何明显的东西,所以我将使用简单的东西:

你有没有:

直接查看数据库以确定您确实有两行? 已验证这两行在您期望的列中是否包含您期望的数据? 是否会以某种方式自动检索第一条记录,因此您实际上是在 while 循环条件下转到第二条记录? 如果添加第三行会怎样?如果您得到 1 或 2 个结果,无论哪种方式,它都可能提供一些额外的信息。

这些都是远射,但也许会有帮助。

【讨论】:

"如果添加第三行会怎样?"这是我要尝试的第一件事 哦...我喜欢类似于选项 3 的内容。不知何故,您从第一行开始,并在循环中跳过它。在开始 while 循环之前,您是否检查过 $result 中是否包含某些内容?【参考方案3】:

您确定您没有因为没有添加任何换行符而全部写入一行而导致漏看吗?

另外。由于uid的类型是INT,所以应该写

WHERE uid = 1

而不是

WHERE uid = '1'

【讨论】:

哦...好一个。当我做这种愚蠢的事情时,我讨厌它。【参考方案4】:

您是否检查并分析了 PHP 输出的来源?也许第一行在 html 的某个地方丢失了。

正如下面的答案还指出,如果发布的代码正是您正在运行的代码,则情况并非如此,但如果其中也有一些 HTML 代码,则可能会发生这种情况.

【讨论】:

以上是关于简单的mysql查询只返回一行的主要内容,如果未能解决你的问题,请参考以下文章

什么可能导致 MySQL 间歇性地无法返回一行?

mysql left join and not equals 应该只返回一行

Mysql查询新列每一行的max函数

MySQL---查询性能优化

mysql数据查询,共有5000条数据,要有三种返回结果。

Mysql优化系列之——优化器对子查询的处理