PHP json array aus mysql abfrage

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
696
Hallo.

Ich möchte aus einer Mysql Datenbankabfrage ein json objekt in der Form:
[{'name': 'name', 'coords': [51.52427, 10.63527], 'value': 243}]
erstellen.

Code:
function get_data()
        {
        $pdo = new PDO('mysql: host=localhost;dbname=####;charset=utf8', '####', '########');


        $statement = $pdo->prepare("SELECT Tabelle1.name as name,
                                           JSON_ARRAY(Tabelle1.breite, Tabelle1.laenge) as coords,
                                           Tabelle1.value as value
                                      FROM Tabelle1;

        $statement->execute();

        $result = $statement->fetchAll(\PDO::FETCH_ASSOC);

        return json_encode($results);

Wenn ich mir in php das json objekt anschaue sieht es genau so aus wie erwartet, nur scheinen sämtliche Inhalte Strings zu sein.
[{"name": "Berlin", "coords": "[52.7264, 10.68494]", "value": "165"}]
.
.
.


Wie schaffe ich es, dass unter "coords" ein array mit floats und unter "value" ein float/int erscheint und nicht alles strings sind?

Beste Grüße
 
Probiere mal vor der Query mit https://www.php.net/manual/en/pdo.setattribute.php PDO::ATTR_STRINGIFY_FETCHES auf false zu setzen, ggf. auch PDO::ATTR_EMULATE_PREPARES auf false.

Die coords bleiben damit aber ziemlich sicher ein String, schließlich gibt die MySQL-Funktion JSON_ARRAY() ja einfach einen String zurück der JSON enthält, den parsed PHP dann ja nicht implizit in ein PHP Array zurück. Am besten du lässt dir breite und laenge einzeln geben und baust deine Struktur für json_encode von Hand zusammen.
 
  • Gefällt mir
Reaktionen: abcddcba
So ähnlich habe ich es jetzt auch gemacht. Ich laufe durch das json-array und baue mir ein neues json-array einzeln zusammen. Das "String"-Array caste ich mit Hilfe von JSON.parse(). Schleifen sind zwar nicht besonders elegant, aber es funktioniert soweit.
 
Zurück
Oben