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

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

Sempervivum

Erfahrenes Mitglied
Hiernach:
PHP cURL sync and async
arbeitet curl synchron, d. h. in dem Fall steht die betr. Variable $order_id noch zur Verfügung und Du kannst damit arbeiten:
Code:
    if($decoded['success'] == 0) {
      echo "$order_id ist nicht mehr im Endpunkt";
      continue;
    } else {
        //get desired fields
Das continue müsstest Du weg lassen können, denn Du hast ja einen else-Zweig, so dass die Aktionen darin nicht ausgeführt werden.
 

canju

Mitglied
Funzt! Danke dir.
Wenn ich das Continue rausnehme, bekomme ich NULL ausgegeben, also quasi den Inhalt, des leeren Objekts. Lasse es daher drin.
 

canju

Mitglied
Ich bekomme jetzt immer diese Meldung:
Code:
Incorrect date value: '' for column `db`.`orders`.`created_date`
Ich dachte eigtl, dass die zweite Zeile hier genau das abfängt und den Wert durch NULL ersetzt:
PHP:
$created_date = $decoded['data']['res']['created_date'];
if($created_date == '' OR !isset($created_date)){$created_date = null;};
Was mache ich falsch?
 

Sempervivum

Erfahrenes Mitglied
Ich hatte auch nicht genau genug gelesen: Die Fehlermeldung sagt, dass der Wert '' ist obwohl Du versuchst, das mit dem genannten Code anzufangen. Wenn ich den Code teste, funktioniert er auch, ich bekomme in beiden Fällen null. Habe erst Mal keine Idee, warum sich der Code bei dir anders verhält. Poste doch vielleicht etwas mehr von dem Umfeld, von dem Lesen aus dem JSON bis zum Schreiben in die Datenbank
Mein Editor korrigiert OR zu or und in der Doku bei php.net finde ich es auch nur klein geschrieben. Ändere es sicherheitshalber mal auf Kleinschreibung.
 

canju

Mitglied
OR oder or scheint kein unterschied zu machen.

Auszug aus var_dump($decoded);
PHP:
["created_date"]=>NULL

DB-Insert
PHP:
if($decoded['success'] == 0) {
      echo "order_id: $order_id nicht mehr im Endpunkt vorhanden \n";
      continue;
    } else {
        //get desired fields
        $created_date = $decoded['data']['res']['created_date'];

        // replace empty fields with null
        if($created_date == '' or !isset($created_date)){$created_date = null;};

        //insert into mysql table
        $insert_data = <<<SQL
        INSERT INTO $destination_table_name(
                    created_date
                  )
                    VALUES(
                      '$created_date'
                    )
        SQL;
        $result = mysqli_query($db, $insert_data);
      }
}
 

Sempervivum

Erfahrenes Mitglied
Mir scheint, hier liegt das Problem:
Code:
        INSERT INTO $destination_table_name(
                    created_date
                  )
                    VALUES(
                      '$created_date'
                    )
        SQL;
Wenn der Wert null ist, ist es kein String mehr und müsste ohne Hochkommas übergeben werden.
 

canju

Mitglied
Wenn der Wert null ist, ist es kein String mehr und müsste ohne Hochkommas übergeben werden.
Hattest recht, ich habe diesen Teil:
PHP:
$insert_data = <<<SQL
        INSERT INTO $destination_table_name(
                    created_date
                  )
                    VALUES(
                      '$created_date'
                    )
        SQL;
Durch folgenden ersetzt:
PHP:
$insert_data = "INSERT INTO $destination_table_name(
                    created_date
                  )
                    VALUES(
                      " . ($created_date == '' ? 'NULL' : "'$created_date'") . "
                    )";

Sollte eh mit Prepared Statement gelöst werden. Dann muss man sich keine Gedanken über Datumsformatierung und NULL machen.
Wäre für Snippets sehr dankbar. Wenn ich mir dann keine Gedanken mehr darum machen muss und mir das gefriemel mit den ganzen zeichen hier " . ($created_date == '' ? 'NULL' : "'$created_date'") . " sparen kann umso besser.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…