这个While循环让我疯狂

时间:2011-01-17 10:06:17

标签: php sql database loops while-loop

我想简单地使用带有php的while循环来显示某些内容,但它无效。

这是代码 -

<?php 

mysqli_select_db($connect,"users");

$select_title = "select title, message from messages where user = '$u' LIMIT 4 ";

$querying = mysqli_query($connect,$select_title) or die ('Whops! Something went wrong.');

$line = mysqli_fetch_assoc($querying);

    //$title = mysqli_real_escape_string($connect,trim($line['title']));

while(($rows = mysqli_fetch_assoc($querying)))
{

    echo $rows['title'];
}

&GT;

现在我有两个标题,但只显示了一个。为什么这样?

7 个答案:

答案 0 :(得分:6)

你在这里取了一行:

$line = mysqli_fetch_assoc($querying);

光标将移动到下一行,因此

while(($rows = mysqli_fetch_assoc($querying)))
{

    echo $rows['title'];
}

仅显示第二行。

最好的解决方案就是评论该行:

 //$line = mysqli_fetch_assoc($querying);

答案 1 :(得分:1)

删除此行:

$line = mysqli_fetch_assoc($querying);

答案 2 :(得分:1)

评论此行将解决您的问题

//$line = mysqli_fetch_assoc($querying);

答案 3 :(得分:1)

...因为您使用第$line = mysqli_fetch_assoc($querying);行获取第一个标题但从未回显它,然后开始循环以浏览其余标题。

删除/取消注释该行,你应该没问题。

答案 4 :(得分:0)

您已经使用

获取一条记录
$line = mysqli_fetch_assoc($querying);

所以只剩下一个

答案 5 :(得分:0)

调试

我的MySQL有点生疏(很久以前因为我使用了SQL =&gt;移动到NoSQL阵营......),但这就是我要做的事情:

  • 首先,我会测试查询是否使用phpmyadmin控制台或命令行中的mysql控制台返回正确的结果。

但我猜这个问题是正确的,因为很多人都在说

$line = mysqli_fetch_assoc($querying);

已经取了一行。但是你仍然可以将它用于调试目的。

PDO

另外我想指出你应该PDO而不是mysqli(我猜几乎不赞成)。 PDO准备好的语句还可以保护您免受SQL注入的影响,并且可以更快,因为它是预编译的。

答案 6 :(得分:0)

每次拨打mysqli_fetch_assoc()时,您都会从结果集中“获取”一条记录。当没有更多记录时,mysqli_fetch_assoc()返回false。顺便说一句,这是你可以使用while循环的原因。

当您调用$line = mysqli_fetch_assoc($querying);时,您从结果集中获取了一条记录,结果集中只留下了1条记录。所以你的while循环只迭代这一条记录。正如其他人所指出的那样 - 你只需要对该行进行评论。

我还建议使用mysqli_fetch_all() function,这将为您提供一个可以使用的普通数组,就像普通数组一样

$results = mysqli_fetch_all($querying, MYSQLI_ASSOC);