PHP/MySQL: Verarbeitung / Durchiterieren von json response aus API-Endpunkt

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Sempervivum

Erfahrenes Mitglied
Nicht ganz, ich meinte nur das prepare vor der Schleife, aber das bind und das execute innerhalb. Du willst ja die vorbereitete Abfrage mit verschiedenen Parametern ausführen.
Ich hatte gerade begonnen, das selber auszutesten, bin aber durch einen Anruf unterbrochen worden. Daher noch kein Ergebnis.
 

canju

Mitglied
Hatte ich kurz vor deinem Post auch probiert. Bleibt aber beim gleichen ergebnis.
Bekomme weiterhin nur je das erste Ergebnis pro URL-Aufruf.
 

Sempervivum

Erfahrenes Mitglied
OK, dann weiß ich erst Mal nicht weiter. Ich versuche, es weiter auszutesten. Sicher meldet sich noch jemand, der erweiterte Kenntnisse hat.
 

Sempervivum

Erfahrenes Mitglied
Ganz dumme Frage:
Du wertest ja das Ergebnis des JSON so aus:
Code:
        //get desired fields
        $tariff_id = $decoded["data"]["result"][0]["tariff_id"];
fields in der Mehrzahl aber Du holst nur die tariff_id aus dem ersten Datensatz heraus. Ist es das was Du meinst wenn Du schreibst:
allerdings wird immer nur das erste Ergebnis jedes Calls in die DB geschrieben.
Das wäre dann genau, was Du programmiert hast aber es entspricht offenbar nicht deinem Wunsch. Also müsstest Du eine zweite Schleife über das Array result im Ergebnis des API-Abrufs programmieren?
 

canju

Mitglied
Es sind sehr viele Felder in der response. Zum Testen hab ich erstmal nur die tariff_id mit drin, damit ich während der Testphase nicht so viele Zeilen im Script habe. Die anderen Felder werde ich dann hinzufügen, sobald alles läuft.

Mit dem:
allerdings wird immer nur das erste Ergebnis jedes Calls in die DB geschrieben.
meinte ich eigtl., dass ich nur den ersten Datensatz eines jeden url aufrufs in die db geschrieben bekomme.
  1. Dieser Call https://api-provider.com/api/tariffs?zipcode=08297&consumption=2500 liefert 114 Ergebnisse (Tarife) - davon wird nur der erste in die DB geschrieben
  2. Dieser Call https://api-provider.com/api/tariffs?zipcode=18556&consumption=4000 liefert nochmal 100 Ergebnisse (Tarife) - hiervon wird wiederum nur der erste in die DB geschrieben.
Ich müsste also insgesamt 214 tariff_ids in der DB gespeichert bekommen. Es werden aber nur 2 gespeichert (jeweils die erste)
Also müsstest Du eine zweite Schleife über das Array result im Ergebnis des API-Abrufs programmieren?
Du meinste eine zweite Schleife im ELSE (=erfolgreich)-Strang? Wenn ja welche Schleife würdest du einsetzen?
 

Sempervivum

Erfahrenes Mitglied
In etwa so, ungetestet:
Code:
    if ($decoded['success'] == 0) {
        echo "Keine Tarife zur Kombination vorhanden: $zipcode und $consumption \n";
        continue;
    } else {
        // loop through all results
        foreach ($decoded["data"]["result"] as $record) {
            //get desired fields
            $tariff_id = $record["tariff_id"];
            //Parameter übergeben
            mysqli_stmt_bind_param($stmt, "s",
                $tariff_id
            );
            //Ausführen
            mysqli_stmt_execute($stmt);
        }
    }
 

Sempervivum

Erfahrenes Mitglied
Super, freut mich zu lesen. Mit den Datenbanksachen am Anfang waren wir da ja vollkommen auf der falschen Spur und die Lösung war relativ einfach.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…