MySQL - Insert Problem - kein Syntax-Fehler - MySQL-Struktur-Fehler?

  • Hallo liebes Forum,

    ich habe mal wieder ein Problem, an dem ich schon lange (2 Tage) herumtüftel - erfolglos.
    Vielleicht kann mir jemand helfen?
    Das Problem ist der INSERT-Befehl, der nicht funktioniert. Alle Datenfelder sind korrekt gefüllt, was ich über eine ganze Reihe von ECHO-Befehlen überprüft habe.
    Ich habe auch versucht den INSERT-Befehl mit einer "Minimal-Konfiguration" zu testen, ebenfalls erfolglos.
    Eine Fehlermeldung erscheint nicht, das Programm läuft einfach durch, ohne den Insert-Befehl auszuführen.
    Vermutlich ist es ein logisches Problem in MySQL, aber welches?

    Hier meine Script:

    Hier der 2. Code:

    ... und hier die Bildschirmausgabe:

    ich danke Euch vielmals für die Unterstützung.

    mfG Hans-Werner

    Einmal editiert, zuletzt von Arne Drews (7. Juni 2017 um 20:18) aus folgendem Grund: MOD: PHP-Tags eingefügt

    • Offizieller Beitrag

    Dann lass Dir mal $sql2 ausgeben, dann solltest Du den Fehler entdecken.
    Sollte es weitere Probleme geben, müsstest Du Deinen Tabellenaufbau in der Datenbank einmal zeigen.

    Auch solltest Du generell mal den ErrorReport einschalten, denn hier kommt mindestens eine Warnung:

    PHP
    <html>
    <?php 
       header('Content-Type: text/html; charset=ISO-8859-1');
        // include "entwickler.inc.php";
    ?>

    Grundsätzlich lass Dir noch PreparedStatements ans Herz legen.
    Kontextwechsel sollte auch überdacht werden. Und ShortOpen-Tags lieber nicht verwenden, weil die in einer aktuelleren PHP-Version evtl. nicht mehr funktionieren.

  • Hallo, ich habe im 2. Script das Error-Reporting eingeschaltet. Es kommt aber kein Fehlerhinweis.
    Den Tipp mit $sql2 werde ich gleich mal ausprobieren. Danke

    - - - Aktualisiert - - -

    Habe mir $sql2 mit echo angzeigt. Sieht eigentlich (für mich zumindest) ganz gut aus.

    Hier ein Ausschnitt von der Ausgabe:

    ... ein weiterer Tipp vielleicht?

    - - - Aktualisiert - - -

    ... das Schlüsselfeld ist Auto-Increment, das kann man ja m. E. im Insert-Befehl weglassen!

    - - - Aktualisiert - - -

    Hier die Datenstruktur:

    2 Mal editiert, zuletzt von Arne Drews (7. Juni 2017 um 21:39) aus folgendem Grund: MOD: Code-Tags verwendet

    • Offizieller Beitrag
    Zitat

    Habe mir $sql2 mit echo angzeigt. Sieht eigentlich (für mich zumindest) ganz gut aus.


    Dein ernst jetzt??? Daran fällt Dir nichts auf?

    Code
    [COLOR=#333333]insert into statistik           . (stat_datum, stat_zeit, stat_anztische, stat_anzgaeste, stat_umsatz) values (''2017-06-06'','2','2','8','365')[/COLOR]


    Ich erkenne da auf Anhieb zwei Fehler und ein fragwürdiges Quoting von numerischen Werten.
    Du verwendest doch phpMyAdmin, kopier Dir die Zeile doch mal dort in das SQL-Feld und lass Dir die Fehler mal anzeigen.

    Zum Tipp ErrorReporting zählt auch, sich die Fehler der MySQLi-Erweiterung zurückgeben zu lassen.

  • Hallo Arne,
    ich habe aus dem Datum die Quotes herausgenommen. Trotzdem erhalte ich die folgende Fehlermeldung.

    Code
    [B]Fehler[/B]
    
    
    [B]SQL-Befehl:[/B]     
    
    insert into statistik . (stat_datum, stat_zeit, stat_anztische, stat_anzgaeste, stat_umsatz) values ('2017-06-06','2','2','8','365')
           [B]MySQL meldet: [/B][URL='http://localhost/phpmyadmin/url.php?url=https%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.7%2Fen%2Ferror-messages-server.html'][IMG]http://localhost/phpmyadmin/themes/dot.gif[/IMG][/URL] 
     #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im  Handbuch nachschlagen bei '(stat_datum, stat_zeit, stat_anztische,  stat_anzgaeste, stat_umsatz) values ('20' in Zeile 1

    Den 2. Fehler erkenne ich auch nicht mit der Fehlermeldung, da ich den Wert '20' in Zeile 1 - nicht zuordnen kann.
    Wo ist hier bitte die '20' zu finden?

    Eine Ergänzung noch:
    in einem funktionierenden SELECT musste ich die Quotes für ein Datum mitgeben,
    für einen INSERT darf ich die Quotes NICHT mitgeben, komisch oder?

    Einmal editiert, zuletzt von hpuettma (7. Juni 2017 um 23:17)

  • Hallo Arne,
    "Schau bitte mal die Zeile genau an und achte besonders auf den Teil vor der ersten."
    Leider verstehe ich diesen Hinweis nicht, sorry. Was ist mit "vor der ersten" gemeint?
    Vermutlich möchtest Du mich auf den Punkt vor der Feldleiste aufmerksam machen.
    Ich denke, dass das in MySQL ein Hinweis auf das ausgelassene Key-Feld ist?
    Kennst Du den Begriff "Verschlimmbesserung"?
    Jeder Versuch von mir das Insert-Statment zu korrigieren führt mich weiter weg von einer Fehlerbeseitigung.
    Try and Error.

    STOP!

    Habe den Fehler gefunden - der erste Punkt in der Feldleiste ist nicht das Auslassungszeichen für das Key-Feld, sondern das Folgezeichen für eine neue Zeile (bei längeren Befehlen) - verstanden!

    Jetzt habe ich den Befehl aus der Befehlsausgabe kopiert und innerhalb von MySQL ausgeführt - es funktioniert! - Aber, wenn ich den Script durchlaufen lasse, wird der Befehl trotzdem ignoriert, komisch.

    Hier die Ausgabe - der Insert wurde NICHT durchgeführt.

    Wenn ich den insert aus der Bildschirmausgabe kopiere und innerhalb von mysql ausführe, funktioniert der Befehl!

    2 Mal editiert, zuletzt von hpuettma (8. Juni 2017 um 10:22)

  • Du setzt einen Wert auf $sql2 und was machst du dann damit? Nix! Und bei einer String-Zuweisung ein "or die" zu schreiben, ist bestimmt auch nicht im Sinne des Erfinders. :D