我不确定是否为此代码使用'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还是每个?
感谢, 尼尔
答案 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(),答案应该是显而易见的。