3

所以,我正在使用 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'];
   }
}
4

5 回答 5

7

停止!

您正在观看的教程已严重过时!请不要mysql_*在新代码中使用函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程


至于具体问题,这一行

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

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

于 2012-11-16T17:43:56.883 回答
1

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

while ($post = mysql_fetch_assoc($query))

mysql_fetch_assoc

返回值

返回与获取的行相对应的字符串关联数组,如果没有更多行,则返回FALSE 。

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

于 2012-11-16T17:44:57.110 回答
1

如mysql_fetch_assoc的手册页中所述:

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

于 2012-11-16T17:45:06.847 回答
0
while ($post = mysql_fetch_assoc($query))

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

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

于 2012-11-16T17:45:17.610 回答
0

它是 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-11-16T17:49:48.017 回答