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

时间:2011-06-10 14:28:49

标签: php mysql

我不确定是否为此代码使用'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,这是完全空白的(即使db上有数据)。

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

所以它应该是mysql-fetch-assoc还是-array,它应该是while还是每个?

感谢, 尼尔

2 个答案:

答案 0 :(得分:1)

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

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());

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

答案 1 :(得分:0)

  

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

我希望你已经减少了代码以证明它的目的是什么;即真正的代码包含合理的注释和错误处理。如果没有,那么您如何知道从服务器获取任何数据?此外,在检查结果集中的行数时,您有一个赋值而不是比较:

if ($numResults = 0) {

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

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