2

何百万回も前に行ったことでエラーが発生する理由に興味がありますが、特定のスクリプトで突然エラーが発生します'Undefined variable:row'

しかし、行は私には定義されているようです...

$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

そのifステートメント以外のものに初期化$rowしない場合、それは未定義です。

$rowそれ以外の場合、ある種のnull値に初期化したくない場合(完全に不合理ではない)、ステートメント$rowの外側をチェックするコードを次のようなもので囲むことができます。if

if(isset($ row))
  doSomething();

面倒ですが、明示的に定義していない変数は、nullであっても未定義であり、コードで右辺値として参照された場合(などを除く)、ランタイムエラーが発生する可能性があることを覚えておく必要がありますisset。したがって、一般的には、常に変数を初期化するか、上記のようなコードを自由に適用します。

これが問題ではないことが判明した場合はお詫び申し上げますが、コードを見ずにこれ以上のことを考えることはできません。

編集:申し訳ありませんが、「定義済み」ではなく「isset」です。私が実際にPHPを使用してからしばらく経ちました。構文ではなく、概念で質問に答えようとしました。私の間違い。

于 2009-09-27T07:47:42.637 に答える
1

オフトピックですが、mysql_fetch_arrayの代わりにmysql_fetch_assoc()を使用することをお勧めします。そうすれば、コードで任意の数値の代わりに実際のフィールド名を使用できます。

print $row[2]

vs

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