Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit mysqli - ich fall vom Glauben ab

Einklappen

Neue Werbung 2019

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

  • Probleme mit mysqli - ich fall vom Glauben ab

    Hallo.

    Ich bin neu hier. Benni heiße ich und bin schon seit einigen Jahren mit PHP / MySQL unterwegs.
    Aber heute fall ich vom Glauben ab.... vielleicht bin ich aber auch nur blöd und jemand von euch kann mir helfen.

    Ich habe eine for-Schleife in der ein (immer gleiches, nur durch Feld-Inhalte abweichendes) SQL-Statement zusammengebaut wird und per mysqli an eine MySQL-DB geschickt wird. Der Schleifeninhalt sieht (vereinfacht) ungefähr so aus:

    PHP-Code:
    $sqlcmd "INSERT INTO bew SET feld1='" $var1 "';
    $result = $mysqli->query($sqlcmd);
    if(
    $result == true) {
      echo "
    ok"."<br>";
    } else {
      echo "
    doofGrund" . $mysqli->error."<br>";

    Die Schleife wird 17mal durchlaufen. Die ersten 4 Datensätze werden in der DB korrekt angelegt. Dann kommt einer, der nicht angelegt wird. Die Variable §result ist also false, in der Fehlervariable $mysqli->error ist aber kein Inhalt! Die folgenden 12 Datensätze werden wieder korrekt angelegt.

    Und es kommt noch schlimmer. Wenn ich mir in der Schleife die jeweiligen SQL-Commands ausgebe und dann den einen fehlgeschlagenen Command über phpMyAdmin direkt in der Datenbank ausführe, dann läuft er ohne Probleme rein.

    Ich bin echt am durchdrehen. Hab schon alles mögliche versucht und geprüft, aber ich blicks echt nicht!

    Hier 3 originale Commands, der letzte davon ist der "Problemfall"....

    Code:
    INSERT INTO fibuop SET BEWFA='1',BEWMAND='693',BEWKONTO='693016',BEWBUDAT='3697914665860',BEWOPKZ='9',BEWOPFA='1',BEWOPMAND='693',BEWOPKONTO='693016',BEWOPAUSZ='5',BEWBEDAT='42793',BEWOPTZKZ='0',BEWOPLFD='0',BEWGKONTO='18000',BEWBELNR='370769',BEWFRKND=' ',BEWFRBEL='1002650 ',BEWBUART='20',BEWBUTEXT='Sammelaufstell. Febr.2017 ',BEWBUKZ=' ',BEWSH='S',BEWBETRAG='5245.49',BEWSALDO='18067.29',BEWFAELLIG='42973',BEWMAHNDAT='42975',BEWMAHNKZ='9',BEWMAHNST='1',BEWLMD='0',BEWBTBSKD='0',BEWBTBSKP='0.00',BEWBTBZK='0',BEWJOURN='0',BEWTAGE='195',BEWUFBAZ=' ',BEWUID='BTCH/38',BEWLSEINZ='0',BEWLSEKZ=' ',BEWRKZ=' ',BEWSTKZ=' ',BEWDLA='42988',BEWBEL1093='0',BEWRES1='V'
    ok
    
    INSERT INTO fibuop SET BEWFA='1',BEWMAND='693',BEWKONTO='693016',BEWBUDAT='3703271513710',BEWOPKZ='0',BEWOPFA='1',BEWOPMAND='693',BEWOPKONTO='693016',BEWOPAUSZ='0',BEWBEDAT='42852',BEWOPTZKZ='0',BEWOPLFD='0',BEWGKONTO='18000',BEWBELNR='371993',BEWFRKND=' ',BEWFRBEL='1012386 ',BEWBUART='20',BEWBUTEXT='Sammelaufstellg. April 17 ',BEWBUKZ=' ',BEWSH='S',BEWBETRAG='8704.11',BEWSALDO='29826.47',BEWFAELLIG='43032',BEWMAHNDAT='0',BEWMAHNKZ='0',BEWMAHNST='0',BEWLMD='0',BEWBTBSKD='0',BEWBTBSKP='0.00',BEWBTBZK='0',BEWJOURN='0',BEWTAGE='0',BEWUFBAZ=' ',BEWUID='EBER/14',BEWLSEINZ='0',BEWLSEKZ=' ',BEWRKZ=' ',BEWSTKZ=' ',BEWDLA='0',BEWBEL1093='0',BEWRES1=' '
    ok
    
    INSERT INTO fibuop SET BEWFA='1',BEWMAND='693',BEWKONTO='693016',BEWBUDAT='3700938686690',BEWOPKZ='0',BEWOPFA='1',BEWOPMAND='693',BEWOPKONTO='693016',BEWOPAUSZ='0',BEWBEDAT='42824',BEWOPTZKZ='0',BEWOPLFD='0',BEWGKONTO='18000',BEWBELNR='371398',BEWFRKND=' ',BEWFRBEL='1007673 ',BEWBUART='20',BEWBUTEXT='Sammelaufstellg. März 17 ',BEWBUKZ=' ',BEWSH='S',BEWBETRAG='3055.07',BEWSALDO='21122.36',BEWFAELLIG='43004',BEWMAHNDAT='43011',BEWMAHNKZ='0',BEWMAHNST='1',BEWLMD='0',BEWBTBSKD='0',BEWBTBSKP='0.00',BEWBTBZK='0',BEWJOURN='0',BEWTAGE='0',BEWUFBAZ=' ',BEWUID='BTCH/38',BEWLSEINZ='0',BEWLSEKZ=' ',BEWRKZ=' ',BEWSTKZ=' ',BEWDLA='43011',BEWBEL1093='0',BEWRES1=' '
    doof. Grund:
    Könnt ihr mir irgendwie weiterhelfen??

    Jede Hilfe ist herzlich willkommen.

    Grüße
    Benni

  • #2
    Ok.
    Habs grade noch gefunden (mit Hilfe eines GENERAL LOG im MySQL-Server.
    Es war eine unsauber umgesetzt Zeichenkodierung. UTF-8 ist dein Freunde.

    Thread closed.

    Kommentar


    • #3
      In deinem Beispiel oben beachtest du den Kkontextwechsel zu SQL gar nicht. Das ist eine SQL-Injection Lücke. Warum nutzt du nicht einfach prepared Statments?

      Und:

      Oben im Code ist ein Syntaxfehler, erste Zeile hinten fehlt ein ".
      Dann: Phantasiecode zu posten ist nicht ideal, wenn dann zeig den korrekten.

      Kommentar


      • #4
        Ich stelle tatsächlich die Scripte grade auf Prepared Statements um
        Der Syntaxfehler ist im Original nicht drin.
        Und okay - ich werde bei meiner nächsten Frage den echten Code posten. Dachte halt, es ist leichter zu verstehen, was passiert, wenn das "drumrum", das nicht relevant für das Problem ist, nicht mit gepostet wird.

        Aber in diesem Fall hat es sich inzwischen ja eh erledigt.

        Danke.

        LG
        Benni

        Kommentar


        • #5
          Zitat von BeSt79 Beitrag anzeigen
          Und okay - ich werde bei meiner nächsten Frage den echten Code posten. Dachte halt, es ist leichter zu verstehen, was passiert, wenn das "drumrum", das nicht relevant für das Problem ist, nicht mit gepostet wird.
          Du solltest Beispielcode schreiben, bei dem das Problem nachvollziehbar auftritt. Denn das "drumrum" interessiert keinen.

          Kommentar


          • #6
            INSERT INTO kann mehr als einen Datensatz einfügen...

            Kommentar

            Lädt...
            X