Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Problem: Warning: Illegal string offset 'id' in \...\mysql003.php on line 34

Einklappen

Neue Werbung 2019

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

  • MySQL Problem: Warning: Illegal string offset 'id' in \...\mysql003.php on line 34

    Guten Morgen,

    vielleicht hat ja jemand hier im Forum einen Tipp für mich, was an dieser Abfrage verkehrt ist?

    Ich habe eine *.json Datei, welche eingelesen und in ein Array gewandelt wird. aby.json:
    PHP-Code:
    {"1CR":{"id":1,"name":"1CRedit","txFee":"0.01000000","minConf":3,"depositAddress":null,"disabled":0,"delisted":1,"frozen":0}} 
    Die wird verarbeitet und soll dann in die Database "test002" und in die Tabelle "1cr" mit 8 Spalten eingetragen werden.

    PHP-Code:
    $jsonFile="aby.json";
    $jsondata file_get_contents($jsonFile);
    $data json_decode($jsondatatrue);

    $array_data $data['1CR'];

    echo 
    "<pre>";
    var_dump($array_data);
    echo 
    "</pre>";


    $servername "localhost";
    $username "root";
    $password "";
    $dbname "test002";

    // Create connection
    $conn = new mysqli($servername$username$password$dbname);
    // Check connection
    if ($conn->connect_error) {
        die(
    "Connection failed: " $conn->connect_error);
    }

    foreach (
    $array_data as $row) {
        
    $sql "INSERT INTO 1cr ('id', 'name', 'txFee', 'minConf', 'depositAddress', 'disabled', 'delisted', 'frozen') VALUES ('" $row["id"] . "', '" $row["name"] . "', '" $row["txFee"] . "', '" $row["minConf"] . "', '" $row["depositAddress"] . "', '" $row["disabled"] . "', '" $row["delisted"] . "', '" $row["frozen"] . "')";
        
    $conn->query($sql);
    }

    $conn->close(); 
    Die Abfrage schmeisst mir aber o.a. Fehler um die Ohren und eingetragen wird in die Database auch nichts? Wo könnte der Fehler liegen?
    VG Loddar

  • #2
    PHP-Code:
    echo "<pre>";
    var_dump($array_data);
    echo 
    "</pre>"
    Und was gibt das aus?


    Zeig mal die fertige Query: https://php-de.github.io/jumpto/sql/...query-ausgeben


    Warum nutzt du eigentlich keine Prepared Statments, dann sparst du dir so String-gepuzzle und sicher gegen Injections ist es auch.
    The string "()()" is not palindrom but the String "())(" is.

    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


    • #3
      was gibt denn das var_dump() den erwarteten Array aus?

      Kommentar


      • #4
        Das ist nicht der Query der die Fehlermeldung schmeißt, sondenr PHP. Der Fehler "Illegal string offset 'id'" sagt, das die Variable ($row) kein Array ist, sondern ein String. Das ist auch nicht verwunderlich, die Schleife ist falsch. Die geht durch die einzelnen Werte und nicht über "rows". Lass die Scheife weg und das Problem ist gelöst, zumindestens unter der Bedingung, dass das JSON immer so aufgebaut ist.

        Kommentar


        • #5
          Hallo nochmal, es war tatsächlich die falsche Schleife. Nachdem ich das foreach rausgenommen habe, war sowohl die Fehlermeldung weg und die Daten wurden korrekt in die Database eingetragen.
          PHP-Code:
              $sql "INSERT INTO 1cr (id, name, txFee, minConf, depositAddress, disabled, delisted, frozen) VALUES ('" $array_data["id"] . "', '" $array_data["name"] . "', '" $array_data["txFee"] . "', '" $array_data["minConf"] . "', '" $array_data["depositAddress"] . "', '" $array_data["disabled"] . "', '" $array_data["delisted"] . "', '" $array_data["frozen"] . "')";
              
          $conn->query($sql); 
          Für den nächsten Schritt brauche ich - so denke ich aber wieder die Schleife, denn das Json besteht in Wirklichkeit aus mehreren Zeilen:
          Code:
          {
            "1CR": {
              "id": 1,
              "name": "1CRedit",
              "txFee": "0.01000000",
              "minConf": 3,
              "depositAddress": null,
              "disabled": 0,
              "delisted": 1,
              "frozen": 0
            },
            "ABY": {
              "id": 2,
              "name": "ArtByte",
              "txFee": "0.01000000",
              "minConf": 8,
              "depositAddress": null,
              "disabled": 0,
              "delisted": 1,
              "frozen": 0
            },
            "AC": {
              "id": 3,
              "name": "AsiaCoin",
              "txFee": "0.01000000",
              "minConf": 15,
              "depositAddress": null,
              "disabled": 0,
              "delisted": 1,
              "frozen": 0
            }
          }
          Das var_dump($data); gibt das Json korrekt aus:
          Code:
           
           array(3) {   ["1CR"]=>   array(8) {     ["id"]=>     int(1)     ["name"]=>     string(7) "1CRedit"     ["txFee"]=>     string(10) "0.01000000"     ["minConf"]=>     int(3)     ["depositAddress"]=>     NULL     ["disabled"]=>     int(0)     ["delisted"]=>     int(1)     ["frozen"]=>     int(0)   }   ["ABY"]=>   array(8) {     ["id"]=>     int(2)     ["name"]=>     string(7) "ArtByte"     ["txFee"]=>     string(10) "0.01000000"     ["minConf"]=>     int(8)     ["depositAddress"]=>     NULL     ["disabled"]=>     int(0)     ["delisted"]=>     int(1)     ["frozen"]=>     int(0)   }   ["AC"]=>   array(8) {     ["id"]=>     int(3)     ["name"]=>     string(8) "AsiaCoin"     ["txFee"]=>     string(10) "0.01000000"     ["minConf"]=>     int(15)     ["depositAddress"]=>     NULL     ["disabled"]=>     int(0)     ["delisted"]=>     int(1)     ["frozen"]=>     int(0)   } }
          Nur wie bekomme ich das in die Database? Besten Dank für eine Tipp (danach nerve ich auch nicht mehr, versprochen )

          Kommentar


          • #6
            Na vom Grundsatz wie du es im Startbeitrag gezeigt hast. Mit dieser Struktur jetzt mußt du das gesamte data-Array nehmen und nicht nur $data['1CR']. Lass dir testweise $row in der Schleife ausgeben, dann siehst du ob es richtig läuft.

            Kommentar


            • #7
              Super danke, jetzt gehts mit der foreach-Schleife.

              Kommentar

              Lädt...
              X