Ankündigung

Einklappen
Keine Ankündigung bisher.

Select innerhalb einer Funkion

Einklappen

Neue Werbung 2019

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

  • Select innerhalb einer Funkion

    Hallo PHP-Gemeinde
    Ich verwende einen Datenbankabruf, der klaglos funktioniert.

    $sql ="SELECT SUM(Vst) AS Vst, SUM(Mwst)AS Mwst, SUM(Ein)AS Ein FROM `".$Tabelle."`WHERE right (Datum,5) BETWEEN '01-01' and '03-31' and Mwst <> Vst"; echo $sql;
    foreach ($conn->query($sql) as $row) {$Vst=$row['Vst']; $Mwst=$row['Mwst'];$Zahllast=$Mwst-$Vst; $Umsatz=$row['Ein'];}
    Doch innerhalb einer Function bekomme ich kein Ergebns, dafür folgenden Fehler:

    Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\Buchhaltung\Mehrwertsteuer_neu.php :53 Stack trace: #0 C:\xampp\htdocs\Buchhaltung\Mehrwertsteuer_neu.php (5: Mw() #1 {main} thrown in C:\xampp\htdocs\Buchhaltung\Mehrwertsteuer_neu.php on line 53
    Auch wenn ich den Datenbankaufruf einbinde, ändert sich nichts.Das sieht dann innerhalb einer Funktion so aus:

    function Mw()
    { $servername = "localhost"; $username = "root"; $password = "";
    try {
    $conn = new PDO("mysql:host=$servername;dbname=buchhaltung", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }

    $sql ="SELECT SUM(Vst) AS Vst, SUM(Mwst)AS Mwst, SUM(Ein)AS Ein FROM `".$Tabelle."`WHERE right (Datum,5) BETWEEN '01-01' and '03-31' and Mwst <> Vst";
    foreach ($conn->query($sql) as $row) {$Vst=$row['Vst']; $Mwst=$row['Mwst'];$Zahllast=$Mwst-$Vst; $Umsatz=$row['Ein'];}
    }

    Mw();
    Was mache ich bloß falsch?
    Ich bedanke mich gleich vorsorglich für jeden Beistand.

  • #2
    Was mache ich bloß falsch?
    Datenbankverbindungsobjekte gehören als Parameter übergeben (=> Scope).

    Auch wenn ich den Datenbankaufruf einbinde, ändert sich nichts.
    Wenn die Verbindung fehlschlägt, tust du ja auch so, als wäre nichts passiert. => Exceptions soll man dort fangen, wo man das Problem beheben kann, nicht wo die Exception entsteht.

    Kommentar


    • #3
      Danke für deine Mithilfe.Sehr schlau bin ich allerdings nicht daraus geworden. Schreibst du von der
      catch(PDOException $e) ?
      Und wenn ja, wo und wie soll ich die ansetzen?

      Kommentar


      • #4
        Schreibst du von der catch(PDOException $e) ?
        Ja. Respektive vom ganzen try ... catch Konstrukt.

        Und wenn ja, wo und wie soll ich die ansetzen?
        Dort, wo du den Fehler beheben kannst. Da das bei einer DB-Connect-Exception nicht möglich ist, kannst du nur bevor du deine reguläre Ausgabe startest in die Fehlerausgabe abzweigen.

        Kommentar


        • #5
          Na gut, werde es versuchen. Verwirrend ist für mich, dass alles außerhalb der Funktion reibungslos abläuft

          Kommentar


          • #6
            Da hilft nur Debugging, um der Ursache auf die Spur zu kommen.

            Kommentar

            Lädt...
            X