Pit: mysqli: Seltsam

Hallo Forum,

ich verstehe gerade nicht, was los ist:

echo("$query<br>");
$result  = mysqli_query ($verbindung,$query);
if ($result  == FALSE) {
    error ($query);
}

Meine ausgegebene Query in phpMyAdmin ausgeführt, wird tadellos ausgeführt.

Aber die Query wird nicht über den php-Code ausgeführt. Ich werhalte keinerlei Fehlermeldung. Wenn ich aus $verbindung z.b. $verbindung1 (also etwas unbekanntes) mache, erhalte ich einen Fehler, also sollte $verbindung bekannt sein.

Wie debugge ich das denn weiter?

Pit

  1. in phpMyAdmin

    Das erzeugt die Vermutung, dass phpMyAdmin entweder die Querry verändert und/oder statt mysqli eben pdo benutzt, welches Deine Querry WOMÖGLICH anders repariert.

    Außerdem (und das ist wahrscheinlicher) kann es sein, dass Du ganz schlicht einfach das Ergebnis falsch behandelst oder gar nicht wirklich das Ergebnis behandelst... steht denn was im im Error-Log? Und auf was ist error_reporting gesetzt?

    <?php
    error_reporting( E_ALL );
    ini_set( "display_errors", 1 );
    

    wirkt manchmal Wunder.

    1. Hi,

      Das erzeugt die Vermutung, dass phpMyAdmin entweder die Querry verändert und/oder statt mysqli eben pdo benutzt, welches Deine Querry WOMÖGLICH anders repariert.

      Gute Idee. Aber iuch benutze genau dasselbe Script mit anderen Werten nochmal woanders und dort läuft die Query und mysqli perfekt.

      Außerdem (und das ist wahrscheinlicher) kann es sein, dass Du ganz schlicht einfach das Ergebnis falsch behandelst oder gar nicht wirklich das Ergebnis behandelst...

      Was meinst du damit? Der db-Eintrag sollte doch ohne jegliche Behandlung durch obigen Code erfolgen, oder?

      steht denn was im im Error-Log? Und auf was ist error_reporting gesetzt?

      <?php
      error_reporting( E_ALL );
      ini_set( "display_errors", 1 );
      

      wirkt manchmal Wunder.

      Werde ich morgen umsetzen, ich bin grad am falschen Rechner.

      Pit

      1. Außerdem (und das ist wahrscheinlicher) kann es sein, dass Du ganz schlicht einfach das Ergebnis falsch behandelst oder gar nicht wirklich das Ergebnis behandelst...

        Was meinst du damit? Der db-Eintrag sollte doch ohne jegliche Behandlung durch obigen Code erfolgen, oder?

        Wenn Du schon Dein Zeug nicht zeigen willst (weshalb ich nicht mal wusste, was für einen Typ von Querry Du hast), dann implementiere das mysqli_stmt::$error_list - Zeug aus dem Handbuch.

        1. Wenn Du schon Dein Zeug nicht zeigen willst (weshalb ich nicht mal wusste, was für einen Typ von Querry Du hast), dann implementiere das mysqli_stmt::$error_list - Zeug aus dem Handbuch.

          Das kannte ich noch nicht. Danke für den Link, ich werde mir das anschauen und wahrscheinlich auch einbauen.

          Pit

  2. Hallo Pit,

    echo("$query<br>");
    $result  = mysqli_query ($verbindung,$query);
    if ($result  == FALSE) {
        error ($query);
    }
    

    Gibt es denn überhaupt eine Funktion error?

    Müsste es nicht eher

    if ($result  == FALSE) {
        mysqli_error($verbindung);
    }
    

    heißen?

    Wie debugge ich das denn weiter?

    Neben dem schon angesprochenen error-reporting gibt es auch var_dump, zum Beispiel

    var_dump(mysqli_query($verbindung,$query));
    

    Bis demnächst
    Matthias

    --
    Pantoffeltierchen haben keine Hobbys.
    1. Hallo Matthias,

      Gibt es denn überhaupt eine Funktion error?

      Ja, die gibt es und ich übergebe ihr immer die Query, damit ich dann in der db in der error-Tabelle gleich nachsehen kann, welche Query den Fehler verursacht hat.

      Neben dem schon angesprochenen error-reporting gibt es auch var_dump, zum Beispiel

      var_dump(mysqli_query($verbindung,$query));
      

      Aha. Auch das werde ich morgen gleich ausprobieren, weil derzeit am falschen Rechner.

      Gruß, Pit

      1. Tach!

        var_dump(mysqli_query($verbindung,$query));
        

        Aha. Auch das werde ich morgen gleich ausprobieren, weil derzeit am falschen Rechner.

        Das wird dir lediglich false anzeigen. Wenn du die Fehlermeldung wissen möchtest, musst du das schon mit mysqli_error() abfragen. Die Meldungstexte von MySQL sind keine PHP-Fehler und werden deshalb nicht über den PHP-Fehlermeldungsmechanismus ausgegeben.

        dedlfix.

        1. Hi dedlfix,

          Das wird dir lediglich false anzeigen. Wenn du die Fehlermeldung wissen möchtest, musst du das schon mit mysqli_error() abfragen. Die Meldungstexte von MySQL sind keine PHP-Fehler und werden deshalb nicht über den PHP-Fehlermeldungsmechanismus ausgegeben.

          Ich steh weiterhin auf dem Schlauch, denn:

          $result  = mysqli_query ($verbindung,$query);
          if ($result  == FALSE) {
              mysqli_error($verbindung);
              echo("SQL-Fehler");
          } else {
          echo("Kein Fehler");
          }
          

          gibt mir bei einem absichtlich in die Query eingebauten Fehler zwar mein echo aus, aber keine Fehlermeldung über mysqli_error($verbindung). var_dump($verbindung) an dieser Stelle zeigt mir, dass die Verbindung bekannt ist.

          Nehm ich den Fehler aus der Query raus, wird mir der echo-Befehl der else Schleife angezeigt, aber die Query nicht ausgeführt.

          Pit

          1. Tach!

            Wenn du die Fehlermeldung wissen möchtest, musst du das schon mit mysqli_error() abfragen.

            Ich steh weiterhin auf dem Schlauch, denn:

                mysqli_error($verbindung);
            

            gibt mir bei einem absichtlich in die Query eingebauten Fehler zwar mein echo aus, aber keine Fehlermeldung über mysqli_error($verbindung).

            Schau bitte auf der verlinkten Handbuchseite nach, wie die Funktion arbeitet und zu verwenden ist.

            dedlfix.

            1. Hi dedlfix,

              Schau bitte auf der verlinkten Handbuchseite nach, wie die Funktion arbeitet und zu verwenden ist.

              Oops. Ok, jetzt erhalte ich auch eine entsprechende Fehlermeldung.

              Und auch der Rest hat sich aufgeklärt:

              Die Query wurde korrekt ausgeführt. Über mein Formular wurden aber ein paar Altwerte mitgeliefert, die unnötig sind. Die haben aber dafür gesorgt, dass einzelne Werte später im Script überschrieben wurden. Daher dachte ich, die Query sei nicht ausgeführt worden.

              Eine exit-Befehl hinter der Query und Nachsehen in der db hat mir gezeigt, dass die Query völlig korrekt ausgeführt worden war und zwar von Anfang an…

              Klassischer Fehlalarm... danke an alle, die sich mitbemüht haben, obwohl gar kein anderer als ich die Antwort finden konnte 😟

              Pit