Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON elent mappen für mysql insert

Einklappen

Neue Werbung 2019

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

  • JSON elent mappen für mysql insert

    Hallo,

    ich habe ein JSON mit 50 elemente.
    Die Bezeichnung der Elemente passt zu den Spaltennamen in der mysql Tabelle.

    Kann man nicht die Elemente automatisch mappen lassen, damit ich nicht 50 Zuweisungen im Code habe?

    Beispiel:
    Element "name" soll in die Spalte "name" eingefügt werden.

    Danke!

    Fohnbit

  • #2
    Mit foreach durchgehen, INSERT-Statement kreieren.

    Kommentar


    • #3
      gibt es da kein import util ?

      Kommentar


      • #4
        [selbst gelöscht]

        Kommentar


        • #5
          [selbst gelöscht]

          Kommentar


          • #6
            Zitat von fastix Beitrag anzeigen

            Du kannst einen Multi-Insert bauen:
            Woher weisst du dass er mehrere DS erhält?
            Ich lese daraus 50 Spalten, ein Datensatz, aber so richtig eindeutig hat der TE sich nicht geäussert.

            Kommentar


            • #7
              Zitat von fohnbit Beitrag anzeigen
              Hallo,

              ich habe ein JSON mit 50 elemente.
              Die Bezeichnung der Elemente passt zu den Spaltennamen in der mysql Tabelle.

              Kann man nicht die Elemente automatisch mappen lassen, damit ich nicht 50 Zuweisungen im Code habe?
              Warum nicht eine DB verwenden, die JSON direkt speichert? Mit PostgreSQL und JSONB als Datentyp dafür könntest Du die (wichtigsten) Elemente darin auch effektiv indexieren etc.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                [selbst gelöscht]

                Kommentar


                • #9
                  Das ist ein Beispiel für einen Array, der allerdings nur Integer-Werte enthält. Wenn die Datentypen unterschiedlich sind müsste man $bindStr mit einem Loop und einer Prüfung auf den Datentypen zusammenstellen.

                  PHP-Code:
                  $questionMarks array_fill(0count($baseData), '?');
                  $stmtIns $db->prepare('INSERT INTO table (' implode(','array_keys($baseData)) . ') VALUES (' implode(',',
                      
                  $questionMarks) . ')');
                  $bindStr str_repeat('i'count($baseData));
                  $stmtIns->bind_param($bindStr, ...array_values($baseData));
                  $stmtIns->execute(); 

                  Kommentar


                  • #10
                    Zitat von jonas3344 Beitrag anzeigen
                    Das ist ein Beispiel für einen Array, der allerdings nur Integer-Werte enthält. Wenn die Datentypen unterschiedlich sind müsste man $bindStr mit einem Loop und einer Prüfung auf den Datentypen zusammenstellen.

                    PHP-Code:
                    $questionMarks array_fill(0count($baseData), '?');
                    $stmtIns $db->prepare('INSERT INTO table (' implode(','array_keys($baseData)) . ') VALUES (' implode(',',
                    $questionMarks) . ')');
                    $bindStr str_repeat('i'count($baseData));
                    $stmtIns->bind_param($bindStr, ...array_values($baseData));
                    $stmtIns->execute(); 
                    Aber Vorsicht:
                    Im Code-Schnipsel werden weder Daten noch die Keys geprüft. Es kann auch als schönes Beispiel dienen, wie man eventuell einen möglichen Einstiegspunkt für eine SQL-injection (https://www.php.net/manual/de/securi...-injection.php) schafft, weil man vergisst, vorab die Daten kritisch zu prüfen. Besser wäre vielleicht etwas in dieser Richtung.
                    PHP-Code:
                    $questionMarks array_fill(0count($baseData), '?');
                    $stmtIns $db->prepare('INSERT INTO table (' implode(
                        
                    ',',
                        
                    array_filter(
                            
                    array_keys($baseData),
                            function(
                    $v){ return preg_replace('/\s+/'''$v); }
                        ) 
                    // remove all whitespace
                    ). ') VALUES (' implode(',',
                    $questionMarks) . ')');
                    $bindStr str_repeat('i'count($baseData));
                    $stmtIns->bind_param($bindStr, ...array_map(
                        
                    'intval',
                        
                    array_values($baseData)
                    ));
                    // allow only integer
                    $stmtIns->execute(); 

                    Kommentar


                    • #11
                      MySQL kennt auch JSON als Datentyp. Du kannst alles in eine column packen und trotzdem bei queries auf einzelne Attribute zugreifen

                      https://dev.mysql.com/doc/refman/5.7/en/json.html
                      Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

                      Kommentar

                      Lädt...
                      X