未定义的变量数组


Undefined variable array

我在第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'];
        }
    }
}