XML->MySQLi: memorizza solo l'ultimo record

  • Creatore Discussione Creatore Discussione kanzy
  • Data di inizio Data di inizio

kanzy

Nuovo Utente
27 Lug 2015
3
0
0
OltrePo Pavese
buona giornata @ tutti!..

Ogni giorno scarico automaticamente questo file:

http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

i cui dati (valore cambio, cod.ISO valuta) devono essere inseriti nella tabella 'cambi' nei campi 'cambi_spot' e 'cambi_iso' sul db del sito.

Ho preparato questo codice:

PHP:
  $eurofx = simplexml_load_file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
  foreach($eurofx->Cube->Cube->Cube as $fix) {
    $risolvi = $connex->prepare("UPDATE cambi SET cambi_spot = ?, cambi_iso = ?");
    $risolvi->bind_param('ds', $spot, $ciso);
    $spot = $fix["rate"];
    $ciso = $fix["currency"];
    $risolvi->execute();
    $risolvi->close();
  }
Ma funziona in modo anomalo, cioè memorizza in tutti i records della tabella solo i dati dell'ultima voce.
Le mie competenze di PHP non vanno oltre l'ordinaria amministrazione :(, dunque ho bisogno di una dritta. Ricordo che tempo addietro è stato esposto un problema analogo, ma non riesco a recuperare il 3d. Grazie a chi vorrà darmi una mano. :)
 
ciao
secondo me l'errore è nella query di update, non mettendo un WHERE uppa sempre lo stesso record e quindi ti ritrovi solo col valore finale
però potrei aver detto una cazzata
 
mmmh.. eh già, hai ragione.. grazie!

Ecco, dopo una sistematina, il codice funzionante, nella speranza che possa essere utile.

PHP:
		$eurofx = simplexml_load_file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
		$risolvi = $connex->prepare("UPDATE cambi SET cambi_spot = ? WHERE cambi_iso = ?");
		$risolvi->bind_param('ds', $spot, $ciso);
		foreach($eurofx->Cube->Cube->Cube as $fix) {
			 $spot = $fix["rate"];
			 $ciso = $fix["currency"];
			 $risolvi->execute();
		}
		$riso->close();
 
@borgo italia
Grazie!

Ecco il codice sistemato e funzionante, nella speranza possa essere utile.
PHP:
$eurofx = simplexml_load_file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml");
echo '<p>Cambi del <strong>'. $eurofx->Cube->Cube["time"] .'</strong></p>';
$risolvi = $connex->prepare("UPDATE cambi SET cambi_spot = ? WHERE cambi_iso = ?");
$risolvi->bind_param('ds', $spot, $ciso);
foreach($eurofx->Cube->Cube[0]->Cube as $fix) {
	$spot = $fix["rate"];
	$ciso = $fix["currency"];
	$risolvi->execute();
}
$risolvi->close();
 

Discussioni simili