我在第15行收到一个错误,上面写着"未定义的变量:row2"。我该如何解决此问题?
$limit = 20;
$res1 = mysql_query('SELECT *
FROM contact
WHERE name = "Greg"');
$res2 = mysql_query('SELECT name
FROM contact c, passport p
ON c.idNum = p.iNum
WHERE date >= "2015-03-03" AND t< "2015-03-21');
if(!$res1 && !$res2) {
die('Query no valid: ' . mysql_error());
}
else {
while(($row1 = mysql_fetch_array($res1)) || ($row2 = mysql_fetch_array($res2))) {
$sub = $row1['num'] - $row2['num'];
if($sub <= $limit) {
echo '<br>row name is: ', $row2['name'];
}
}
}
我想做的是从第一个表中得到一个数字(它只会导致Greg的行)。然后用第二个表的结果中的数字减去它。将其结果放入子变量中,并检查其是否<=20.如果是,它会打印出这一行。如果没有,则返回while循环以检查另一行。到目前为止,我走的路对吗?
您需要更改while()
循环的条件。考虑这个例子:
$a = 1;
if ($a == 1 || $b = 2) {
var_dump(isset($b));
}
var_dump()
的输出将是boolean false
,因为$b
不存在,这也是$row2
未定义的原因。
问题是,当使用||
评估条件时,一旦找到匹配项,PHP将停止评估其他条件,因此不会执行右侧的其他比较或赋值。
把你的while
改成这样,你无论如何都需要$row1
和$row2
:
while(($row1 = mysql_fetch_array($res1)) && ($row2 = mysql_fetch_array($res2))) {
(注意&&
而不是||
)
此外,您可能也希望在第二个查询中使用SELECT c.*
,因为您只选择了name
列,并且也尝试使用num
。
注意:如果num
在您的列中已经可用,请选择第二次查询中的所有列,这样您的问题就会得到解决。!
注意:试着用&&
替换||
,你就可以离开了
通过使用概念语言中的||
或OR
,正如我所说的那样。你正在以一种方式制作代码,即只有一个会通过,但如果你同时通过了两个,那么你应该用&&
替换||
,所以这就是为什么你的$row2
已经创建好了,所以它可以用于更多的操作。!
$limit = 20;
$res1 = mysql_query('SELECT *
FROM contact
WHERE name = "Greg"');
$res2 = mysql_query('SELECT *
FROM contact c, passport p
ON c.idNum = p.iNum
WHERE date >= "2015-03-03" AND t< "2015-03-21');
if(!$res1 && !$res2) {
die('Query no valid: ' . mysql_error());
}
else {
while(($row1 = mysql_fetch_array($res1)) && ($row2 = mysql_fetch_array($res2))) {
$sub = $row1['num'] - $row2['num'];
if($sub <= $limit) {
echo '<br>row name is: ', $row2['name'];
}
}
}