Datensätze werden wirr gespeichert (über spalten hinweg)

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

  • Datensätze werden wirr gespeichert (über spalten hinweg)

    Guten Tag erst einmal.

    Mein Serverscript speichert seit heute Mittag die Daten total wirr
    in die Datenbank.

    laut betreiber gab es letzten Mittwoch ein PHP update.

    Die daten werden von einer gz Datei gezogen (mit Inhalt von json encoded arrays)

    Hier die Screenshots:

    (insert fail)
    http://testshop.schuhtritt.de/db_insert_fail_1.jpg

    (local insert - wie es sein sollte)
    http://testshop.schuhtritt.de/db_insert_fail_2.jpg

    hat jemand ein Tipp, woran dies liegen könnte?

    Grüße

  • #2
    Ohne Code und Testdaten wohl kaum.

    Aber durchnummerierte Spalten deuten auf ein fehlerhaftes Datenbankdesign hin. Informier dich mal über Datenbanknormalisierung.

    Kommentar


    • #3
      Zitat von yumlin Beitrag anzeigen
      Guten Tag erst einmal.

      Mein Serverscript speichert seit heute Mittag die Daten total wirr
      in die Datenbank.

      laut betreiber gab es letzten Mittwoch ein PHP update.
      Von welcher alten Version auf welche neue?

      Die "Migration-Guides" für die kleineren Versions-Updates findest du hier: PHP: Appendices - Manual

      Die daten werden von einer gz Datei gezogen (mit Inhalt von json encoded arrays)
      Das Handbuch listet zu jeder Funktion entsprechende Änderungen bei Versions-Wechseln im Abschnitt "Changelog" auf. Bspw. für json_decode(): PHP: json_decode - Manual
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        Guten Tag,

        es ist immer noch die eigentliche 5.4 version aktiv, da
        wir das ja im backend bestimmen können.

        Jedenfalls habe ich ganz einfachen mysqli insert Befehl
        getestet, welcher auch nicht klappt.

        Code:
        <?php
        require_once "../includes/connection_server_mysqli.php";
        
        
        //require_once "../includes/connection_LexSql_MySqli.php";
        
        
        // BEFORE ACTION - DELETA ALL SERVER DATA
            $db->query('truncate table oxarticles');
        
        // STATIC DATA
                $oxbaseshop = 'oxbaseshop';
                $LEX_ID = '123456';
        
        //QUERYS
            
            //VATER MIT VARIANTEN
            $sql_1 = 'INSERT INTO oxarticles 
                                                    (OXID,OXSHOPID) 
                                                    
                                                    VALUES (?,?)';
                                                    $eintrag_1 = $db->prepare( $sql_1 );
                                                    $eintrag_1->bind_param( 'ss',
                                                    
                                                    $LEX_ID,$oxbaseshop);
            
        $eintrag_1->execute();    
        ?>
        Zuletzt geändert von yumlin; 19.12.2015, 12:13.

        Kommentar


        • #5
          Was heißt "nicht klappt"? Wie lautet die Fehlermeldung, die von der Datenbank zurückgegeben wird?

          Kommentar


          • #6
            da wird keine fehlermeldung zurückgegeben.

            der Datensatz wird schlicht nicht gespeichert.
            ich versuche es mal mit eine schleife.

            Kommentar


            • #7
              Zitat von yumlin Beitrag anzeigen
              da wird keine fehlermeldung zurückgegeben.

              der Datensatz wird schlicht nicht gespeichert.
              Dann gibt es eine Fehlermeldung, die du ignorierst.

              Zitat von yumlin Beitrag anzeigen
              ich versuche es mal mit eine schleife.
              Wo ist denn da bitte der Zusammenhang? Mein Auto springt heute nicht an, also stell ich mal einen anderen Radiosender sein?

              Kommentar


              • #8
                Das Grundproblem möchte ich auf den Grund gehen,
                daher habe ich eine simple insert anweisung getestet.

                auf dem localhost klappt es, so wie das ursprüngliche Skript auch, welches aber unübersichtlich ist.

                Daher habe ich wie im geposteten Beispiel zu sehen alle Fehlerquellen ausgeschlossen, und ein simples insert Script verwendet, welches keine Fehler ausgibt, da es keine Fehler enthält.

                Aber der Datensatz wird nicht gespeichert.

                Das ist auch das eigentliche Problem.

                Der Zusammenhang in einer Schleife liegt darin, das wenn mehrere Datensätze gespeichert werden sollen,
                es tatsächlich zum insert kommt, nur aber wirr und durcheinander.

                Meine Vermutung liegt darin, das es nicht an dem PHP Script liegt, sondern
                am Server.
                Zuletzt geändert von yumlin; 19.12.2015, 12:43.

                Kommentar


                • #9
                  Zitat von yumlin Beitrag anzeigen
                  Daher habe ich wie im geposteten Beispiel zu sehen alle Fehlerquellen ausgeschlossen, und ein simples insert Script verwendet, welches keine Fehler ausgibt, da es keine Fehler enthält.

                  Aber der Datensatz wird nicht gespeichert.
                  Na wenn das kein Fehler ist, was dann?

                  Zitat von yumlin Beitrag anzeigen
                  Das ist auch das eigentliche Problem.

                  Meine Vermutung liegt darin, das es nicht an dem PHP Script liegt, sondern
                  am Server.
                  Das Problem ist, dass du Vermutungen anstellst statt einfach nachzuschauen, was wirklich passiert. Du überprüfst nicht, ob die Abfrage überhaupt erfolgreich war sondern vertraust einfach blind darauf, dass das schon so passen wird. execute() liefert einen Rückgabewert, wie lautet dieser? Und ist das error-Property im Statement-Objekt befüllt? Wenn ja, was steht da drin?

                  Kommentar


                  • #10
                    OK, ich werde die Rückgabewerte checken

                    Kommentar


                    • #11
                      OK, du meinst doch den Rückgabewert, wenn ein Fehler auftritt oder?

                      oder kann ich Rückgabewerte erzwingen.

                      Kommentar


                      • #12
                        Zitat von yumlin Beitrag anzeigen
                        OK, du meinst doch den Rückgabewert, wenn ein Fehler auftritt oder?

                        oder kann ich Rückgabewerte erzwingen.
                        PHP: mysqli_stmt::execute - Manual

                        Kommentar


                        • #13
                          Code:
                          <?php
                          require_once "../includes/connection_server_mysqli.php";
                          
                          
                          //require_once "../includes/connection_LexSql_MySqli.php";
                          
                          
                          // BEFORE ACTION - DELETA ALL SERVER DATA
                              $db->query('truncate table oxarticles');
                          
                          // STATIC DATA
                                  $oxbaseshop = 'oxbaseshop';
                                  $LEX_ID = '123456';
                          
                          
                              //VATER MIT VARIANTEN
                           $stmt = mysqli_stmt_init($db);
                              $sql_1 = "INSERT INTO oxarticles (OXID,OXSHOPID) VALUES (?,?)";
                                                                      
                          
                          mysqli_stmt_prepare($stmt, $sql_1);
                              mysqli_stmt_bind_param($stmt, "ss", $LEX_ID,$oxbaseshop);
                              if(mysqli_stmt_execute($stmt))
                              {
                                  mysqli_close($stmt);
                              }
                              
                              print_r ($stmt);
                          
                          ?>
                          Habe es versucht - aus dem o.g. Code bekomme ich folgende Ausgabe.
                          Ist es das?

                          Code:
                          mysqli_stmt Object (     [affected_rows] => -1     [insert_id] => 0     [num_rows] => 0     [param_count] => 2     [field_count] => 0     [errno] => 1210     [error] => Incorrect arguments to mysqld_stmt_execute     [error_list] => Array         (             [0] => Array                 (                     [errno] => 1210                     [sqlstate] => HY000                     [error] => Incorrect arguments to mysqld_stmt_execute                 )          )      [sqlstate] => HY000     [id] => 1 )

                          Kommentar


                          • #14
                            Warum verwendest du jetzt plötzlich die prozedurale Schreibweise? Bleib entweder bei objektorientiert oder verwende nur prozedural, aber vermische die Schreibweisen bitte nicht.

                            [error] => Incorrect arguments to mysqld_stmt_execute
                            Sicher, dass OXID ein String und kein Integer ist?

                            Bitte bemühe dich um eine einheitliche und lesbare Schreibweise von Variablen. Warum ist $LEX_ID groß, aber $oxbaseshop klein geschrieben? Und bitte nummeriere keine Variablen.

                            Kommentar


                            • #15
                              ja, ist nen string

                              Kommentar

                              Lädt...
                              X