所以,我正在使用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'];
}
}
答案 0 :(得分:7)
您正在观看的教程已经过时了! Please, don't use mysql_*
functions in new code。它们不再被维护,deprecation process已经开始了。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
至于具体问题,这一行
while ($post = mysql_fetch_assoc($query)) {
是条件。如果有更多结果,mysql_fetch_assoc()
会返回一个数组;如果没有结果,则false
会返回false
。如果它返回false
,则条件将评估为{{1}}并且循环将中断。
答案 1 :(得分:1)
基本上你要获取新行并将其分配给$post
变量:
while ($post = mysql_fetch_assoc($query))
返回值
返回与。对应的字符串关联数组 获取行,如果没有更多行,则 FALSE 。
当mysql_fetch_assoc
返回false
时,它会被分配到$post
变量,然后在while
内进行评估,然后循环停止。
答案 2 :(得分:1)
正如mysql_fetch_assoc手册页中所述:
返回值:返回字符串的关联数组 对应于获取的行,如果没有更多行,则为FALSE。
答案 3 :(得分:0)
while ($post = mysql_fetch_assoc($query))
表示第一个$ post获取一个值。当出现错误时,mysql_fetch_assoc返回false。
while循环检查$ post是否为false,它可以是true,整数,数组等。
答案 4 :(得分:0)
这是PHP的一部分。赋值的结果是赋值。这允许像:
$x = $y = $z = 7;
将7
分配给所有3个变量。因此,给定
while($row = mysql_result(...)) {
当没有更多要提取的数据时,mysp_result将返回一个行数据数组或一个布尔值false。该数组/布尔值分配给$ row。由于这个赋值包含while(),所以array / boolean传播到while()。
如果你得到一行数据,那么这是一个被while处理为布尔值的数组,并且循环继续。如果没有更多数据,mysql_fetch返回一个布尔值false,它被赋值给$ row,而false也是赋值的结果,这意味着while()得到一个FALSE,并且循环终止。