Я получаю уведомление PHP «неопределенная переменная»

StackOverflow https://stackoverflow.com/questions/1483002

  •  18-09-2019
  •  | 
  •  

Вопрос

Мне любопытно, почему я получаю сообщение об ошибке в том, что я делал миллион раз раньше, но внезапно в определенном сценарии получаю сообщение об ошибке «Неопределенная переменная:ряд'

И все же мне кажется, что ряд определен...

$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
Это было полезно?

Решение

Если вы не инициализируете $row к чему-то вне этого оператора if, тогда оно не определено.

В противном случае, если вы не хотите инициализировать $row к какому-то нулевому значению (что не совсем необоснованно), вы можете захотеть окружить любой код, проверяющий $row за пределами if заявление с чем-то вроде

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

Это неприятно, но вам просто нужно помнить, что любые переменные, которые вы не определяете явно, даже если они равны нулю, не определены и могут привести к ошибке во время выполнения, если на них ссылаются как на rvalue в коде (за исключением isset и т. д.).В общем, либо всегда инициализируйте переменные, либо свободно применяйте код, подобный приведенному выше.

Прошу прощения, если проблема не в этом, но я не могу придумать ничего большего, не видя вашего кода.

РЕДАКТИРОВАТЬ:Извините, это «isset», а не «определено».Прошло много времени с тех пор, как я действительно работал с PHP.Я попытался ответить на вопрос с помощью концепции, а не синтаксиса.Виноват.

Другие советы

Оффтоп, но рекомендую использовать mysql_fetch_assoc() вместо mysql_fetch_array вы можете использовать в коде фактические имена полей вместо произвольных чисел.

print $row[2]

против

print $row['email];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top