【发布时间】:2018-09-18 05:01:03
【问题描述】:
我找到了一些连接到 MySQL 数据库的 PHP 代码,并为表 Cities 的每一行获取列 CityName。我很好奇为什么使用while() 循环而不是for() 或foreach。所以这是我关于 while() 在循环数组的情况下如何工作的问题:
首先,
$row变量是不是一个二维数组,它的行包含 SQL 查询中的城市列表,它的列包含查询每一行的列?如果是这种情况,不能使用
for()或foreach()循环遍历$row数组吗?第二,
while()如何知道数组何时结束,只在while()的第一行使用$row = $stmt->fetch_assoc()来结束循环?三、
while()如何在循环结束不使用next()的情况下移动到$row数组的下一行?最后但并非最不重要的一点是,
echo $row['CityName'];如何在不指定要使用的数组行但仅是列CityName的情况下输出$row数组的每一行的城市名称?
感谢您的任何回答。
$query="SELECT CityName FROM Cities";
if($stmt = $connection->query("$query"))
{
while ($row = $stmt->fetch_assoc())
{
echo $row['CityName'];
}
}
else
{
echo $connection->error;
}
【问题讨论】:
-
一个......................一次问题。您发布的内容过于宽泛。
-
$row 是一维数组 = 1 行。
-
while ($row = $stmt->fetch_assoc()) 是等式。的:while (true) { $row = $stmt->fetch_assoc(); if (!$row) 中断; ...
-
1) 没有。 1.b)它可以,但不适用于这里。 2)当
fetch_assoc()返回NULL(意味着没有更多的结果要获取)时,它被强制转换为false,这使得循环结束。 3) 这就是 loops 在其块的末尾所做的 - 他们 loop 返回。 4) $row 只是结果的 one 行...我建议你去学习一些有关计算机程序如何工作的基础知识。 -
注意:试着改掉在一次性变量中声明 SQL 语句的习惯,这些变量只使用一次。在将查询直接提供给函数的情况下,跟踪代码要容易得多,并且不再有可能搞砸并发送
$sql3,而不是视觉上相似的$sql8。还要避免像"$x"这样的反模式,其中$x单独是等效的。