Ottengo avviso PHP “variabile non definita”
Domanda
Sono curioso di sapere perché sto ricevendo un errore su qualcosa che ho fatto un milione di volte prima, ma sono tutto ad un tratto su un determinato script di ottenere un errore 'non definita variabile: row'
Ancora fila sembra definito a me ...
$sql = 'SELECT * FROM table WHERE id="1" LIMIT 1 ';
$res = mysql_query($sql);
if(mysql_num_rows($res) != FALSE) {
$row = mysql_fetch_array($res);
}
È possibile che questo è SQL pseudo ... ma ho verificato che istruzione SQL e so che la sua facendo emergere un risultato. So anche che $ riga è la memorizzazione dei dati, perché se vado
echo $row[0];
ottengo i dati giusti.
Quindi, a mia conoscenza, la variabile $ row è definito. Eppure ancora - un errore. Sto perdendo la testa o che cosa mi manca qui? Dovrebbe non solo questo errore / avviso verificarsi se $ fila non esistesse?
modifica
Scusate ragazzi il suo tutto accade dentro l'istruzione 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];
}
modifica 2
se faccio un print_r ($ riga) ottengo il seguente:
Array
(
[0] => Robert
[firstName] => Robert
[1] => Nibbles
[lastName] => Nibbles
[2] => robert@nibbles.com
[email] => robert@nibbles.com
)
Undefined variable: row
Soluzione
Se non si inizializza $row
a qualcosa al di fuori che, se dichiarazione, allora è indefinito.
In caso contrario, se non si desidera inizializzare $row
a qualche tipo di valore nullo (non del tutto irragionevole), si potrebbe voler circondare qualsiasi codice che controlla $row
al di fuori della dichiarazione if
con qualcosa di simile
if (isset($row)) doSomething();
È un dolore, ma hai appena avuto modo di ricordare che tutte le variabili non definiscono in modo esplicito, anche per nulla, sono indefiniti e possono portare a un errore di runtime se si fa riferimento come rvalue nel codice (tranne che in isset
etc .). Quindi, in generale, sia sempre inizializzare le variabili o liberalmente applicare il codice come sopra.
Mi scuso se questo risulta non essere il problema, ma non riesco a pensare a qualcosa di più di questo senza vedere il vostro codice.
EDIT: Scusate, è "Isset" non "definito". Stato un po 'da quando ho actualy lavorato con PHP. Ho cercato di rispondere alla domanda con un concetto, non sintassi. Il mio errore.
Altri suggerimenti
Offtopic, ma mi consiglia di utilizzare mysql_fetch_assoc () invece di mysql_fetch_array, quindi è possibile utilizzare l'attuale i nomi dei campi nel codice, invece di alcuni numeri arbitrari.
print $row[2]
vs
print $row['email];