Ambedue sono corretti e non danno problemi solo che il secondo è migliore perché liberi la memoria utilizzata dal Result Set.
Una domanda: ma il primo ed il secondo $sql="......." sono uguali?
Osservazione:
dal manuale di php:
Solo per le istruzioni SELECT, SHOW, EXPLAIN o DESCRIBE mysql_query() restituisce un identificativo di risorsa o FALSE se la query non è stata eseguita correttamente. Per altri tipi di istruzioni SQL, mysql_query() restituisce TRUE in caso di successo e FALSE in caso di errore. Un valore restituito diverso da FALSE indica che la query era lecita ed è stata eseguita dal server. Questo non indica niente riguardo il numero di righe coinvolte o restituite. è assolutamente possibile che una query abbia successo ma che non coinvolga o restituisca nessuna riga.
Quindi sarebbe più opportuno che tu gestisca il risultato di mysql_query per vedere se si sono verificati errori o meno.
Inoltre, per come tu hai scritto
$qry=mysql_query($sql);
Se qui c'è un errore viene visualizzato a video. Per questioni di eleganza, sarebbe meglio ke tu catturassi l'errore o ad esempio
$qry=@mysql_query($sql) or die("TUO MESSAGGIO");
o, meglio ancora:
$qry=@mysql_query($sql);
if ($qry === FALSE)
{
FAI UN QUALCOSA....
}
Stesso discorso per mysql_fetch_row();
Ciao