【问题标题】:Undefined variable array未定义的变量数组
【发布时间】:2016-04-17 23:02:08
【问题描述】:

我在第 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 的行)。然后用第二个表的结果中的数字减去它。将结果放入子变量中,并检查它是否

【问题讨论】:

  • 您减去了$row2['num'],但只在第二个查询中选择了name
  • 所以没有$row2['num'],因为您没有选择该列
  • 嗯..您没有在第二个查询中选择num 列,所以它显示为未定义。!
  • 惰性求值意味着在获取所有 $res1 结果之前,$row2 将不存在
  • 这可以使用 MySQL 中的 JOIN 语句来完成,使用 c.idNum

标签: php mysql arrays


【解决方案1】:

您需要更改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))) {

(注意&amp;&amp; 而不是||

此外,您可能还想在第二个查询中使用SELECT c.*,因为您只选择了name 列,并尝试使用num

【讨论】:

  • 感谢您的建议,关于 &&,不再有错误消息。不幸的是,我没有检索任何数据。 :( 所以我必须继续努力。
【解决方案2】:

注意:如果num 已在您的列中可用,请选择您的第二个查询中的所有列,这样您的问题就会得到解决。!

注意:尝试将|| 替换为&amp;&amp;,这样就可以了。

通过在概念语言中使用||OR,正如我所说的那样。您正在以一种方式编写代码,并且只有一个会通过,但如果您同时通过两个,那么您应该替换||&amp;&amp; 这就是为什么你的 $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'];
        }
    }
}

【讨论】:

  • 您修复了查询,但 $row2 仍将是未定义的变量。
  • @Umair Shah Yousafzai,我试过了,它仍然给我同样的错误信息。
  • @mrteeth :尝试var_dumpprint_r 以确认您是否从两个执行的查询中获得任何数据。!
  • @Umair Shah Yousafzai,错误已解决。非常感谢!但是,我没有得到任何结果。我的数据库中有 200 条记录,我希望能找回 50 条(我手动检查了符合我标准的记录)。我会尝试解决这个问题。
  • @mrteeth:当然!!!没问题。尝试养成使用var_dumpprint_r检查数据库中执行数据的习惯,然后继续编写代码。如果它解决了您的问题,请标记您的答案。
猜你喜欢
  • 2022-08-03
  • 1970-01-01
  • 2016-05-22
  • 2011-06-11
  • 2014-12-13
  • 1970-01-01
  • 2021-02-27
  • 2017-06-14
  • 2015-02-26
相关资源
最近更新 更多