我不确定这段代码是使用"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(),答案应该是显而易见的。