2011-06-10 44 views
0

我不确定是否对此代码使用'while'或'for each'。对mysql查询的每个单独结果使用while语句

我有一个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)) { 


} 

这是未来与完全空白的$数字1(甚至虽然有关于数据库的数据)。

一切正常,$ myusername和mysql查询不返回空。

所以应该是mysql-fetch-assoc或者-array,它应该是while还是for each?

感谢, 尼尔

回答

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: ...");之后,以防止执行代码在你的脚本中重定向行之后,因为标题只有请求用户浏览器重定向吨。

+0

:) ==我不醒,欢呼声,我的分贝有问题,它不是代码。无论如何,谢谢 – Niall 2011-06-10 14:43:37

+0

没问题。 :) – 2011-06-10 14:46:07

0

一切达那是正确的,$名为myUsername和MySQL查询没有返回空

我希望你已经下调代码以证明它是什么打算做;即真实代码包含合理的评论和错误处理。如果没有,那么你怎么知道你是否从服务器获取任何数据?此外,你有一个任务,而不是检查的行数的结果集时的比较:

if ($numResults = 0) { 

您需要根据查询返回获取数据行的可用性/数圈从结果集 - 你不能使用foreach()。

至于是否应该使用_fetch_array()或_fetch_assoc(),答案应该很明显。