Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Arrays als JSON-String in SQL-Datenbank speichern

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Arrays als JSON-String in SQL-Datenbank speichern

    Kleine komplexe Arrays mal schnell in eine SQL-Datenbank zu schreiben wird häufiger gewünscht.
    Hinweise findet man genug, kurze nachvollziehbare C&P-Beispiele schon weniger.
    Das liegt wohl auch daran, dass immer eine Datenbank benötigt wird.
    Für solche kleinen Tests eignet sich SQLite hervorragend, zumal die Datenbank auch im Speicher erstellt werden kann:

    PHP-Code:
    <?php
    if(bin2hex('ä')!=='c3a4') die('Diese Seite muss unbedingt als UTF-8 gespeichert werden !');

    header("Content-Type: text/html; charset=utf-8");

    //user test-array
    $array_org = array(
      
    "abc äöü test",
      array(
    2,16,45),
      
    "und noch ein text für 1€",
      
    true
    );

    //orginal ausgeben
    var_dump($array_org); echo "<br>";

    //JSON String erzeugen
    $js json_encode($array_org);

    //SQlite im Speicher erstellen
    $db = new PDO("sqlite::memory:");
    $sql "CREATE TABLE jtab (id INTEGER PRIMARY KEY , json TEXT )";
    $db ->exec($sql);

    //json einfügen
    $sql "INSERT INTO jtab (id, json) VALUES (?,?)";
    $stmt $db->prepare($sql); //SQL_statment vorbereiten
    $stmt -> execute(array(0,$js));

    //json auslesen
    $stmt $db -> query("SELECT json FROM jtab WHERE id = 0");
    $row $stmt->fetch(PDO::FETCH_ASSOC);

    //Array wiederherstellen
    $array_db json_decode($row['json'],true);
    //zum Vergleich ausgeben
    var_dump($array_db); echo "<br>";

    ?>
    Ausgabe:
    Code:
    array(4) { [0]=> string(15) "abc äöü test" [1]=> array(3) { [0]=> int(2) [1]=> int(16) [2]=> int(45) } [2]=> string(27) "und noch ein text für 1€" [3]=> bool(true) } 
    array(4) { [0]=> string(15) "abc äöü test" [1]=> array(3) { [0]=> int(2) [1]=> int(16) [2]=> int(45) } [2]=> string(27) "und noch ein text für 1€" [3]=> bool(true) }
    Das Beispiel zeigt, wird konsequent mit UTF-8 gearbeitet, sind auch Umlaute und Sonderzeichen kein Problem.
    Die Prepared Statements sorgen hier gleich für die unbedingt notwendige Maskierung der Daten.

    Beispiel kurz getestet mit XAMPP(Win).

    LG jspit
    PHP-Klassen auf github


  • #2
    Danke, finde so kurze verständliche Code-Beispiele, die einfach auf dem eigenen Rechner nachzustellen sind, immer wieder sehr nützlich!
    "2 hours of trial and error can save 10 minutes of manual reading."

    Kommentar


    • #3
      Beitrag ist nun auch in der Wissenssammlung, danke jspit!

      http://php-de.github.io/jumpto/array-as-json-to-sqldb/

      LG
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar

      Lädt...
      X