对mysql查询的每个单独结果使用while语句


using while statement for each individual result of a mysql query

我不确定这段代码是使用"while"还是使用"for each"。

我有一个mysql查询,它将返回多个结果。

然后,对于每个结果,如果$row[number]为空或不是,我想做某件事

我有这个:

$sql = "SELECT * FROM $tbl_name WHERE username='"$myusername'"";
$result=mysql_query($sql);
$numResults = mysql_num_rows($result);
if ($numResults = 0) {
header ("Location: /sms_error.php?error=no_adders");
}
while($row = mysql_fetch_array($result)) {
$number1=$row["number"];
if (!empty($number1)) {

}
if (empty($number1)) {

}

这导致$number1完全为空(即使数据库中有数据)。

所有这些都是正确的,$myusername和mysql查询不会返回空。

那么它应该是mysqlfetch-assoc还是-array?应该是while还是for each??

谢谢,Niall

首先,您在这行代码中遇到了问题:

if ($numResults = 0) {
    header ("Location: /sms_error.php?error=no_adders");
}

这总是错误的-您不是在比较,而是将0分配给$numResults。将其更改为==,然后查看您的查询是否有任何行被拉出。

while($row = mysql_fetch_array($result)) {
$number1=$row["number"];
//...
}

正如我所看到的,这是一个有效的语法。尝试调用var_dump($row)以查看$row数组的内容。

编辑:

哦,是的,而不是这个:

$result=mysql_query($sql);

这样做:

$result=mysql_query($sql) or die(mysql_error());

还有一个建议-您应该始终在header("Location: ...");之后调用exit();,以防止在脚本中的重定向行之后执行代码,因为只有头部要求用户浏览器重定向。

所有这些都是正确的,$myusername和mysql查询不会返回空

我希望您已经精简了代码,以演示它的意图;即真实代码包含合理的注释和错误处理。如果没有,那么你如何知道你是否从服务器上取回了任何数据?此外,在检查结果集中的行数时,您得到了一个赋值而不是比较:

if ($numResults = 0) {

您需要一个基于查询返回的可用性/行数的循环来从结果集中获取数据,而不能使用foreach()。

至于应该使用_fetch_array()还是_fetch_assoc(),答案应该是显而易见的。