[PHP][MySQL] Fehler unbekannter Ursache bei einer Abfrage

  • Guten Abend liebe Community :love: ,


    aus Zufall erfuhr ich heute, dass eine Abfrage von mir nicht mehr funktioniert. Vor ~2 Monaten funktionierte alles und ohne etwas zu ändern, scheint es nun irgendwo einen Fehler zu geben. (Gab es ein Update, das bestimmte Funktionen außer Betrieb setzte?)


    Ich wäre euch äußerst dankbar, wenn Ihr mir bei der Fehlersuche, sowie Behebung, behilflich sein könntet.


    Was ist der Sinn der Abfrage:
    Durch die Eingabe eines eindeutigen Codes werden die passenden Daten (URLs) aus einer Datenbank ausgelesen und als Button wiedergegeben.


    Erklärung der Attribute:

    Code
    1. custom_url = eindeutiger Code
    2. url_1 = URL Nr. 1 (z.B.: [url]https://www.google.de/maps/place/Berlin/[/url] )
    3. url_1_call = Covername des Links für den Button (z.B.: "Google Maps - Berlin")
    4. url_2 = usw....



    Die eigentliche Abfrage ist folgende:



    Durch DEBUG-Codes und Proben konnte ich folgendes feststellen:

    Code
    1. * $search wird erfolgreich eingelesen
    2. * Verbindung zur Datenbank wird erfolgreich hergestellt.
    3. * Datenbank enthält sicher Einträge
    4. * $sql "findet" keine Einträge (es wurde sicher nach einem vorhandenen custom_url gesucht)
    5. * $dp_content gibt dementsprechend einen Fehler aus


    Meine Schlussfolgerung: Der Fehler liegt irgendwo in dieser Zeile $sql = "SELECT * FROM fakten WHERE custom_url LIKE '$search'";.
    Gebe ich diese Zeile ($search durch einen vorhandenen custom_url ersetzt) in phpMyAdmin ein, so funktioniert es.
    Sprich, es liegt an der Zeile, jedoch irgendwie auch nicht? ?( - Ich weiß nicht mehr weiter.


    P.S. Es wurde auch versucht das $search im Code direkt durch einen custom_url zu ersetzten. Selbiges Ergebnis...


    VG und Danke im Voraus!!! <3
    Daniel

  • Vor ~2 Monaten funktionierte alles und ohne etwas zu ändern, scheint es nun irgendwo einen Fehler zu geben.

    Hast du dir in dieser Zeit irgendwelche PHP oder MySQL Updates heruntergeladen?

    Mit freundlichen Grüßen
    FineTime


    INFO: Bei mysql_format steht %d immer für dämlich. Deshalb nehmen wir %s für schlau oder %e für elegant.
    [...]
    Wichtig: Diese abfrage muss IMMER bei stocks stehen, ansonsten kann es sein, dass dein computer gelöscht wird.


    Weitere, mehr oder weniger lustige, Zitate findet ihr auf meinem Profil.

  • Du rufst mysqli_num_rows statt mit dem Query Ergebnis einfach nur mit deinem SQL String auf. Deswegen gibt er dir auch immer zurück dass du keine Ergebnisse hast.

    Und ich kenne mich zwar mit PHP nicht aus, aber könnte es sein dass die zwei einzelnen PHP Codeblöcke gleichzeitig ausgeführt werden? Dadurch würde dann die Verbindung zum MySQL Server getrennt werden und dann nichtmehr funktionieren. Warum schreibst du das in einen seperaten Block und nicht einfach nach dem while?

  • Du rufst mysqli_num_rows statt mit dem Query Ergebnis einfach nur mit deinem SQL String auf. Deswegen gibt er dir auch immer zurück dass du keine Ergebnisse hast.


    Und ich kenne mich zwar mit PHP nicht aus, aber könnte es sein dass die zwei einzelnen PHP Codeblöcke gleichzeitig ausgeführt werden? Dadurch würde dann die Verbindung zum MySQL Server getrennt werden und dann nichtmehr funktionieren. Warum schreibst du das in einen seperaten Block und nicht einfach nach dem while?

    Super, vielen Dank für den Tipp! Ich habe die Debug-Abfrage folgendermaßen überarbeitet:


    PHP
    1. $sql = "SELECT * FROM fakten WHERE custom_url LIKE '$search'";
    2. if(!$sql) { //DEBUG
    3. echo "Keine Einträge gefunden; ";
    4. } else {
    5. echo "Einträge gefunden";
    6. }


    Somit erscheint nun die Nachricht, dass der Eintrag gefunden wurde. Somit kann der Fehler in diesem Bereich auch ausgeschlossen werden (?).


    Ich habe zusätzlich den Teil mit der Trennung der Verbindung in den oberen Block verschoben. Das macht meines Wissens keinen Unterschied, denn alles PHP-haltige ist oben schon abgearbeitet worden.


    ----


    Nevertheless... Bei der letzten Debug-Schleife kommt immer noch die Meldung "Funktioniert nicht". Habe ich etwa bei mysqli_query einen Fehler gemacht bzw. hat sich dort update-technisch etwas geändert? Es lief ja eigentlich alles :huh:

  • Moin,
    bin jetzt ein paar mal dein Script durch gegangen und konnte auch keinen Fehler (Bis auf mysqli_num_rows Aufruf) finden..
    Füge mal die Error Ausgabe nach "Funktioniert nicht" ein und poste was raus kommt.


    Code
    1. printf("Error message: %s\n", mysqli_error($link));

    Falls das was öffentliches wird empfehle ich dir zudem Infos zur SQL Injection.


    Liebe Grüße
    Phil


    (Mein erster Beitrag seit 4 Jahren :thumbup: )

    Momentan im Ruhestand

    Einmal editiert, zuletzt von GrumpyCat ()

  • Alter Beitrag:


    Edit:


    Status: Es funktioniert nun! Für die Zukunft:


    1. Bei der if-Abfrage mit mysqli_query($con, $sql)===TRUE war ein "=" zu viel. Nach der Ausbesserung wurde "Funktioniert" ausgegeben. Sprich es lag auch nicht daran.


    2. Der Fehler lag in der while-Schleife beim MYSQL_ASSOC. Es muss nämlich MYSQLI_ASSOC heißen. X/


    Nun wird alles einwandfrei wiedergegeben, wie es sein soll. Wäre jz wunderbar wenn mit vllt jemand erklären könnte, wieso das wegen dem fehlendem i nicht mehr funktioniert hat ?(



    PS: Vielen Dank für die gebotene Hilfe! :)

    2 Mal editiert, zuletzt von DerCooper () aus folgendem Grund: if-Schleife -> if-Abfrage

  • Wäre jz wunderbar wenn mit vllt jemand erklären könnte, wieso das wegen dem fehlendem i nicht mehr funktioniert hat

    Die neueren PHP Versionen verwenden für die Datenbank-Verbindung mysqli und nicht mehr nur noch mysql.

    Mit freundlichen Grüßen
    FineTime


    INFO: Bei mysql_format steht %d immer für dämlich. Deshalb nehmen wir %s für schlau oder %e für elegant.
    [...]
    Wichtig: Diese abfrage muss IMMER bei stocks stehen, ansonsten kann es sein, dass dein computer gelöscht wird.


    Weitere, mehr oder weniger lustige, Zitate findet ihr auf meinem Profil.