Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion ohne Rückgabewert

Einklappen

Neue Werbung 2019

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

  • Funktion ohne Rückgabewert

    Hallo,

    ich verstehe es leider nicht warum ich keinen Wert zurückgeliefert bekomme

    PHP-Code:

    function unterwegsProjektzeitraum($mysqli$artikelID$Datum_von$Datum_bis){

        
    $sql "

            SELECT SUM(aa_menge) AS `summe_unterwegsProjektzeitraum` 
            FROM artikel_ausgeliehen 

            WHERE aa_status=2 AND aa_artikelID=? AND aa_datum BETWEEN  ? AND ?

            GROUP by aa_datum ORDER by summe_unterwegsProjektzeitraum DESC

            LIMIT 1"
    ;

        
    $res $mysqli->prepare($sql);
        
    $res->bind_param("ssss"$artikelID$Datum_von$Datum_bis$pID);

        
    $res->execute();
        
    $res->bind_result($summe_unterwegsProjektzeitraum);
        
    $res->fetch();
        
    $res->close();  

        return 
    $summe_unterwegsProjektzeitraum

    Aufrufen tu ich die Funktion dann so

    PHP-Code:
    $Ausgabe_unterwegsProjektzeitraum unterwegsProjektzeitraum($mysqli$_GET['artikel'], $ISO_D_von$ISO_D_bis); 
    Geprüft habe ich es so

    PHP-Code:
    var_dump($unterwegsProjektzeitraum);
    // Ergebnis: NULL 
    Teste ich den Code direkt im phpMyAdmin bekomme ich ein Ergebnis

    PHP-Code:

    SELECT SUM
    (aa_menge) AS `summe_unterwegsProjektzeitraum

    FROM artikel_ausgeliehen 
    WHERE aa_status
    =AND aa_artikelID='d49abe245098f0e591996c2dc66bbe2d' AND aa_datum BETWEEN  '2019-09-12' AND '2019-12-31'
    GROUP by aa_datum ORDER by summe_unterwegsProjektzeitraum DESC
    LIMIT 1

    // Ergebnis 2 
    seht ihr ein Fehler?




  • #2
    Poste bitte einen Datenbank-Dump, damit man das am eigenen Rechner nachstellen kann.

    Kommentar


    • #3
      Es gibt keine Variable $unterwegsProjektzeitraum. Zumindest nicht im gezeigten Code.

      Und die Variablen- und Spaltennamen sind hochgradig verwirrend benannt. Man sollte sich sprechende und verständliche Namen überlegen und nicht sowas kryptisches. z.B. was ist aa_status? Und was bedeutet hier 2? Wenn man solche Fragen stellen muss, ist das ein Code-Mangel. Code sollte selbsterklärend sein.

      Kommentar


      • #4
        Zitat von einfachTara Beitrag anzeigen
        Hallo,


        seht ihr ein Fehler?

        mehrere


        1) du kanst kein ORDER BY mit alias namen machen. SELECT felder werden erst ganz zum Schluss verarbeitet von der Reihenfolge her. Du musst auch bei ORDER BY dein SUM ausführen
        2) var_dump($unterwegsProjektzeitraum);
        ist auch klar, deine Variable heißt auch $summe_unterwegsProjektzeitraum
        3) $res->bind_param("ssss", $artikelID, $Datum_von, $Datum_bis, $pID);
        du hast hier angegeben dass du 4 Parameter hast und diese sind Strings, dabei ist aber artikelId und pId eigentlich eine Zahl
        4) wenn ich mir dein SQL query angucke, ist die bind_param reihenfolge nicht korrekt, du musst ja erst $articleId dann $pdId und zum Schluss die Daten übergeben
        5) du sollst nicht $res->fetch() aufrufen sondern $res->execute(); wie es in dem Beispiel der Doku steht https://www.php.net/manual/de/mysqli...bind-param.php
        6) du kannst den error ausgeben mit echo $res->error;
        7) Aktiviere error reporting in deinem Projekt mit error_reporting(-1); ini_set('display_errors','On'); kann sein dass du dadurch noch viel mehr Fehler siehst

        Viel Spaß

        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

        Kommentar


        • #5
          1) du kanst kein ORDER BY mit alias namen machen. SELECT felder werden erst ganz zum Schluss verarbeitet von der Reihenfolge her. Du musst auch bei ORDER BY dein SUM ausführen
          Doch, das geht.
          https://dev.mysql.com/doc/refman/5.6...ith-alias.html

          4) wenn ich mir dein SQL query angucke, ist die bind_param reihenfolge nicht korrekt, du musst ja erst $articleId dann $pdId und zum Schluss die Daten übergeben
          $pdId gibt es nichtmal und es gibt auch keinen Platzhalter dafür, wenn ich das richtig sehe... Wird auch nichtmal an die Funktion übergeben.

          Also joa... so paar Kleinigkeiten sinds dann doch. Bei mysqli kann man sich ja nie sicher sein, aber ich denke, dass durch die zu vielen Parameter ein Fehler beim execute (oder bind) entsteht.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Nein, nur in HAVING, auf der Seite steht doch

            Standard SQL disallows references to column aliases in a WHERE clause. This restriction is imposed because when the WHERE clause is evaluated, the column value may not yet have been determined. For example, the following query is illegal:
            Code:
             SELECT id, COUNT(*) AS cnt FROM tbl_name   WHERE cnt > 0 GROUP BY id;
            Aus Oracle Unterricht kann ich mich noch an die Verarbeitung erinnern

            5) SELECT ..
            1) FROM ..
            2) JOIN ..
            3) WHERE ..
            4) GROUP BY ..
            6) HAVING ...
            7) ORDER BY..

            ahh.. stimmt, in ORDER BY kannst du das nutzen.. ich brauche Kaffee
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

            Kommentar

            Lädt...
            X