我很好奇为什么我之前因为我已经做了一百万次的事情而得到了错误,但是在某个脚本上突然出现错误'未定义变量:行'
然而,行似乎已经定义了......
$sql = 'SELECT * FROM table WHERE id="1" LIMIT 1 ';
$res = mysql_query($sql);
if(mysql_num_rows($res) != FALSE) {
$row = mysql_fetch_array($res);
}
以上是伪sql ...但我已经检查了sql语句,我知道它会带来一个结果。我也知道$ row存储数据,因为如果我去
echo $row[0];
我得到了正确的数据。
据我所知,定义了$ row变量。但仍然 - 一个错误。我是在失去理智还是在这里失踪了?如果$ row不存在,不应该出现此错误/通知吗?
对不起,家伙们在if语句中发生了一切:
$sql = 'SELECT * FROM table WHERE uID="' . $ID . '" LIMIT 1 ';
$res = mysql_query($sql);
if(mysql_num_rows($res) != FALSE) {
$row = mysql_fetch_array($res);
$firstName = $row[0];
$lastName = $row[1];
$email = $row[2];
}
编辑2
如果我执行print_r($ row),我会得到以下内容:
Array
(
[0] => Robert
[firstName] => Robert
[1] => Nibbles
[lastName] => Nibbles
[2] => robert@nibbles.com
[email] => robert@nibbles.com
)
Undefined variable: row
答案 0 :(得分:8)
如果你没有将$row
初始化为if语句之外的东西,那么它是未定义的。
否则,如果您不想将$row
初始化为某种空值(并非完全不合理),您可能希望在{{1}之外包围任何检查$row
的代码。语句类似
if (isset($row)) doSomething();
这很痛苦,但你必须记住,你没有明确定义的任何变量,甚至是null,都是未定义的,并且如果在代码中被引用为rvalue,则可能导致运行时错误({{除外) 1}}等。所以一般来说,要么总是初始化变量,要么自由地应用如上所述的代码。
如果事实证明这不是问题,我道歉,但如果没有看到您的代码,我想不出更多。
编辑:对不起,它是“isset”而不是“已定义”。有一段时间以来我一直在使用PHP。我尝试用概念回答问题,而不是语法。我的错误。
答案 1 :(得分:1)
Offtopic,但我建议使用mysql_fetch_assoc()而不是mysql_fetch_array,然后您可以使用代码中的实际字段名称,而不是某些任意数字。
print $row[2]
VS
print $row['email];