我在第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循环以检查另一行。到目前为止,我是否采取了正确的方式?
答案 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'];
}
}
}