【问题标题】:This While loop is Driving me Crazy这个 While 循环让我发疯
【发布时间】:2011-06-10 08:40:30
【问题描述】:

我想简单地使用 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'];
}

?>

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

【问题讨论】:

  • 因为有人坐在“$line”等你?尝试删除该行...(没有双关语)
  • 你绑替换 echo $rows['title'];有类似 echo 'test' 的东西吗?循环实际上循环了两次吗?
  • mysqli_real_escape_string 接受一个字符串,而旧的传入资源处理程序的方法已被弃用。所以你可以删除$connect 变量

标签: php sql database loops while-loop


【解决方案1】:

您在此处提取了一行:

$line = mysqli_fetch_assoc($querying);

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

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

    echo $rows['title'];
}

将只显示第二行。

最好的解决方案是简单地注释该行:

 //$line = mysqli_fetch_assoc($querying);

【讨论】:

    【解决方案2】:

    删除这一行:

    $line = mysqli_fetch_assoc($querying);
    

    【讨论】:

      【解决方案3】:

      评论此行将解决您的问题

      //$line = mysqli_fetch_assoc($querying);
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          您已经获取了一条记录

          $line = mysqli_fetch_assoc($querying);
          

          所以现在只剩下一个了

          【讨论】:

            【解决方案6】:

            调试

            我的 MySQL 有点生疏(很久以前我使用 SQL => 搬到 NoSQL 阵营...),但这是我会做的:

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

            但我猜这个查询是正确的,因为很多人都这么说

            $line = mysqli_fetch_assoc($querying);
            

            已经在获取一行。但我猜你仍然可以将它用于调试目的。

            PDO

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

            【讨论】:

              【解决方案7】:

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

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

              我也可以推荐使用mysqli_fetch_all()function,这会给你一个普通的数组,你可以使用,好吧,就像一个普通的数组

              $results = mysqli_fetch_all($querying, MYSQLI_ASSOC);
              

              【讨论】:

                猜你喜欢
                • 2012-04-20
                • 2016-09-27
                • 1970-01-01
                • 2011-05-30
                • 2012-11-02
                • 2020-11-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多