Me sale “variable no definida” aviso de PHP
Pregunta
Soy curioso en cuanto a por qué estoy recibiendo un error en algo que he hecho un millón de veces antes, pero soy de repente en una cierta secuencia de comandos conseguir un error 'Indefinido variables: Fila'
Sin embargo, parece fila define a mí ...
$sql = 'SELECT * FROM table WHERE id="1" LIMIT 1 ';
$res = mysql_query($sql);
if(mysql_num_rows($res) != FALSE) {
$row = mysql_fetch_array($res);
}
Lo anterior es sql seudo ... pero hemos comprobado que la instrucción SQL y sé que es sacar un resultado. También sé que $ fila es el almacenamiento de los datos, porque si voy
echo $row[0];
Me da la información correcta.
Así que yo sepa, se define la variable $ fila. Sin embargo, todavía - un error. ¿Estoy perdiendo la cabeza o lo que me estoy perdiendo aquí? No sólo este error / aviso debería ocurrir si no existiera $ fila?
editar
Lo siento chicos es todo sucede dentro de la sentencia 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];
}
editar 2
Si hago un print_r ($ fila) me sale el siguiente:
Array
(
[0] => Robert
[firstName] => Robert
[1] => Nibbles
[lastName] => Nibbles
[2] => robert@nibbles.com
[email] => robert@nibbles.com
)
Undefined variable: row
Solución
Si no inicializar $row
a algo fuera de esa sentencia if, entonces es indefinido.
De lo contrario, si no se desea inicializar $row
a algún tipo de valor nulo (no del todo irracional), es posible que desee para rodear cualquier código que comprueba $row
fuera de la declaración if
con algo como
if (isset($row)) doSomething();
Es un dolor, pero sólo tienes que recordar que cualquier variable que no definen explícitamente, incluso a cero, no están definidos y pueden conducir a un error de tiempo de ejecución si se hace referencia como un valor p en el código (excepto en isset
etc. .). Así que, en general, ya sea siempre inicializar las variables o liberalmente aplicar un código como el anterior.
Me disculpo si esto resulta no ser el problema, pero no puedo pensar en nada más que esto, sin ver su código.
EDIT: Lo siento, es "Isset" no "definido". Ha pasado un tiempo desde que he trabajado con PHP podía comprender. Traté de responder a la pregunta con un concepto, no sintaxis. Mi error.
Otros consejos
Offtopic, pero yo recomiendo usar mysql_fetch_assoc () en lugar de mysql_fetch_array, entonces usted puede utilizar el actual nombres de campo en su código, en lugar de algunos números arbitrarios.
print $row[2]
vs
print $row['email];