Newsgroup: it.comp.www.php
Titolo: Query eseguite in un for

Buongiorno a tutto il news group,
ho la necessità, all'interno di un ciclo for, di eseguire prima una
SELECT per scoprire se un valore è pesente nel DB e poi un UPDATE o
INSERT (a seconda se il valore è presente oppure no).
Facendo questo riesco ad eseguire correttamente solo la prima volta,
ma dal secondo valore in poi del for mi compare questo errore:
 -----------------------------
Warning: mysql_query() [function.mysql-query]: Access denied for user
'ODBC'@'localhost' (using password: NO) in D:\htdocs\immobiliare\dpanel
\classi\class.Mysql.php on line 211
Warning: mysql_query() [function.mysql-query]: A link to the server
could not be established in D:\htdocs\immobiliare\dpanel\classi
\class.Mysql.php on line 211
-----------------------------
Questo tipo di errore non mi è mai capitato e per adesso non sono
riuscito a capire il motivo.
Vi posto il codice che genera il problema:
-----------------------------
// PUNTO DI PARTENZA DEL CODICE
function modificaImmagine(...){
foreach($imgEditTipo as $newImgTipo){
   $nImgTipo = explode('[-]', $newImgTipo);
   // Nome dell'immagine da sostituire
  $nowImg = $nImgTipo[0];
   // Nome della nuova immagine
  $newImg = $nImgTipo[1];
  // Tipo della nuova immagine
  $tipo   = $nImgTipo[2];
 // _________________________________________________________
 //
 // IN  $this->mysql->isFind SI GENERA L'ERRORE   <
---------------------
 // _________________________________________________________
 $imFotoTrovato = $this->mysql->isFind("SELECT codATT FROM foto
 WHERE codATT = '$idImmobile'
AND tipoImmobile = '$tipoImmobile' AND nomeFoto = '$nowImg'");
 // L'immobile in questione è stato trovato, quindi è possibile
eseguire l'update
if($imFotoTrovato)
  $query = "UPDATE foto SET nomeFoto = '$newImg', tipoFoto = '$tipo'
		  WHERE codATT = '$idImmobile' AND tipoImmobile = 'abitazione'
                 AND nomeFoto = '$nowImg'";
 // L'immobile in questione non è stato trovato, quindi eseguo una
insert
 elseif(!$imFotoTrovato)
 $query = "INSERT INTO foto (codATT, tipoImmobile, nomeFoto,
tipoFoto)
		VALUES ('$idImmobile', 'abitazione', '$newImg', '$tipo' )";
 .... resto della funzione .....
}
-----------------------------
-----------------------------
 // FUNZIONA RICHIAMATA DA modificaImmagine
 function isFind($query){
	 // _________________________________________________________
        //
        // IN  $this->numSelectRecord SI GENERA L'ERRORE   <
-----------------
        // _________________________________________________________
 	$num = $this->numSelectRecord($query);
	if ($num == 1)
		return true;
	else
		return false;
 }
-----------------------------
-----------------------------
// FUNZIONA RICHIAMATA DA isFind
public function numSelectRecord($query){
 // _________________________________________________________
 //
 // IN  $this->querySelect SI GENERA L'ERRORE   < -----------------
 // _________________________________________________________
 $risultato = $this->querySelect($query, $this->con);
if ($risultato != false)
    return $num = mysql_num_rows($risultato);
else {
    return false;
 }
}
-----------------------------
-----------------------------
// FINALMENTE SI GIUNGE NELLA FUNZIONE IN CUI SI VERIFICA L'ERRORE
function querySelect($query){
  	//
       $ris = mysql_query($query);
	if($ris)
		return $ris;
	else
		return false;
 }

  }
Non riesco a capire perchè funziona solo una volta, dal secondo ciclo
in poi del for  si genera il problema.
Spero che voi mi possiate aiutare .

 in poi del for  si genera il problema.
Non avrei mai letto tutto il codice che hai postato, quindi provo a 
azzardare una risposta. Se sei sicurissimo che la prima iterazione va a 
buon fine e le altre no, non che è all'interno del for viene richiamata 
a un certo punto la funzione di chiusura della connessione 
mysql_close()?
--
rob4you

 mysql_close()?
Ora controllo per maggiore sicurezza ma immagino di si. Ogni volta che
eseguo una query apro e chiudo la connessione, quindi non penso che
sia quello il problema.

 sia quello il problema.
E che senso ha? Maggior sicurezza? Ma ddaiiiii! :-)
La connessione al db ha senso aprirla all'inizio dello script.
E non ti devi manco preoccupare di chiuderla con la chiamata a 
mysql_close. Sul manuale stesso è specificato che è inutile nel 99,99% 
dei casi chiudere la connessione, perché quando termina lo script la 
connessione viene chiusa automaticamente (a meno che non sia stata 
instaurata una connessione persistente).
Evita quindi di aprire e chiudere la connessione ad ogni query: uno 
spreco terribile, che con la sicurezza non centra proprio nulla! :-)
--
rob4you

 spreco terribile, che con la sicurezza non centra proprio nulla! :-)
:( :(
e infatti avevi ragione, ho trovato un mysql_close che non ci doveva
essere :(
:)