【问题标题】:No condition in PHP while loop?PHP while循环中没有条件?
【发布时间】:2012-11-05 11:30:57
【问题描述】:

所以,我正在使用 PHP 构建我的第一个超级基本 CMS。我不想简单地复制我正在看的教程中的代码,但真的理解它。困扰我的一件事是使用 while 循环来获取帖子。在下面的代码中,我看不到圆括号内的语句如何构成条件。在我看来,它所做的只是将一个数组分配给变量 $post。我想,你怎么能遍历不是条件的东西是我的问题。谢谢!

function get_posts () {
   $query = mysql_query("SELECT * FROM posts") or die(mysql_error());

   while ($post = mysql_fetch_assoc($query)) {
      echo $post['Content'];
   }
}

【问题讨论】:

    标签: php mysql content-management-system while-loop conditional-statements


    【解决方案1】:

    停止!

    您正在观看的教程严重过时! Please, don't use mysql_* functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial


    至于具体问题,这一行

    while ($post = mysql_fetch_assoc($query)) {
    

    是条件。如果有更多结果,mysql_fetch_assoc() 返回一个数组,如果没有结果,false 返回一个数组。如果它返回false,则条件将评估为false,循环将中断。

    【讨论】:

      【解决方案2】:

      基本上,您正在获取新行并将其分配给$post 变量:

      while ($post = mysql_fetch_assoc($query))
      

      mysql_fetch_assoc:

      返回值

      返回对应于 获取的行,如果没有更多行,则为 FALSE

      因此,当mysql_fetch_assoc 返回false 时,它被分配给$post 变量,然后在while 内求值,然后循环停止。

      【讨论】:

      • mysql_* 函数已被弃用 [手册页中的大红框],因此您应该避免使用它们。
      【解决方案3】:

      mysql_fetch_assoc 的手册页所述:

      返回值:返回一个关联的字符串数组 对应于获取的行,如果没有更多行,则为 FALSE。

      【讨论】:

        【解决方案4】:
        while ($post = mysql_fetch_assoc($query))
        

        意味着第一个 $post 得到一个值。 mysql_fetch_assoc 出错时返回 false。

        while 循环检查 $post 是否为假,它可以是真、整数、数组等。

        【讨论】:

          【解决方案5】:

          它是 PHP 的一部分。赋值的结果是被赋值的值。这允许这样的事情:

          $x = $y = $z = 7;
          

          7 分配给所有 3 个变量。因此,给定

          while($row = mysql_result(...)) {
          

          mysql_result 将返回一个行数据数组或当没有更多数据要获取时返回一个布尔值 false。该数组/布尔值分配给 $row。由于这个赋值有 while() 包裹它,所以数组/布尔值传播到 while()。

          如果你得到一行数据,它是一个数组,被 while 视为布尔值 true,循环继续。如果没有更多数据,mysql_fetch返回一个布尔值false,赋值给$row,这个false也是赋值的结果,意味着while()得到一个FALSE,循环终止。

          【讨论】:

            猜你喜欢
            • 2012-10-20
            • 1970-01-01
            • 2023-03-05
            • 2012-12-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-27
            相关资源
            最近更新 更多