未定义的变量数组

时间:2016-04-17 23:02:08

标签: php mysql arrays

我在第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的行)。然后用第二个表的结果中的数字减去它。将其结果放入子变量中,并检查它是否&lt; = 20.如果是,则打印出该行。如果没有,它会返回while循环以检查另一行。到目前为止,我是否采取了正确的方式?

2 个答案:

答案 0 :(得分:2)

您需要更改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。< / p>

答案 1 :(得分:1)

注意:如果您的列中已有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'];
        }
    }
}