2

我很好奇为什么我在以前做过一百万次的事情上出现错误,但突然在某个脚本上出现错误“未定义的变量:行”

然而,对我来说,行似乎已定义......

$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
4

2 回答 2

8

如果你没有初始化$row到 if 语句之外的东西,那么它是未定义的。

否则,如果您不想初始化$row为某种空值(并非完全不合理),您可能希望将任何在语句$row之外检查的代码都包含在类似if

如果 (isset($row))
  做一点事();

这很痛苦,但您只需要记住,您没有明确定义的任何变量,即使是 null,都是未定义的,如果在代码中作为右值引用(除了isset等),可能会导致运行时错误。所以一般来说,要么总是初始化你的变量,要么像上面那样自由地应用代码。

如果事实证明这不是问题,我深表歉意,但如果没有看到您的代码,我想不出更多。

编辑:对不起,它是“isset”而不是“定义”。自从我实际使用 PHP 以来已经有一段时间了。我试图用一个概念而不是语法来回答这个问题。我的错。

于 2009-09-27T07:47:42.637 回答
1

离题,但我建议使用mysql_fetch_assoc()而不是 mysql_fetch_array,然后您可以在代码中使用实际的字段名称,而不是一些任意数字。

print $row[2]

对比

print $row['email];
于 2009-09-27T08:11:56.700 回答