Ankündigung

Einklappen
Keine Ankündigung bisher.

sql-sript nicht bei jedem aufruf einer funktion ausführen

Einklappen

Neue Werbung 2019

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

  • sql-sript nicht bei jedem aufruf einer funktion ausführen

    Hallo Zusammen,

    ich hab eine Funktion in der ein SQL Script Daten abruft und zur Verfügung stellt.

    nun hab ich aber das Problem das diese Funktion in einem anderen Script 100 bis 1000 mal aufgerufen wird.

    Wie kann ich das Ergebnis des SQL Sriptes so speichern das er diese nur einmal aufruft denn an den Daten ändert sich während dem Durchlauf nichts.

    die Funktion ist in einer eigenen Datei abgelegt da mehrere PHP Dateien darauf zugreifen müssen
    Das SQL-Script sollte auch in dieser Funktionsdatei bleiben

    hab schon was über static gelesen, bekomme es aber nicht zu laufen
    auch mit isset wird es jedes mal wieder aufgerufen

    PHP-Code:
    if (!function_exists('art_zer')){
        function 
    art_zer$art_nr )
        {
            ...

            if (!isset(
    $res_len)) {
                static 
    $res_len mysqli_query($db_as"SELECT a_s.as_pos ... 
    Im Voraus schon mal Danke für Eure Hilfe
    VG HimDa


  • #2
    Ändere das Script so, dass es nicht 100 bis 1000 mal aufgerufen wird.

    Kommentar


    • #3
      PHP-Code:
      if (!function_exists('art_zer')){
          function 
      art_zer$art_nr )
          { 
      Das für sich genommen ist schon Falsch. Wenn die Funktion nicht geladen wurde, dann lade sie, üblicherweise mit include.
      Ich persönlich halte ja nichts davon SQL-Abfragen in Funktionen zu packen, aber das muss jeder selber wissen.

      Kommentar


      • #4
        Hallo Zusammen,

        danke für eure Antwort.

        die Funktion überprüft in einer Datenbanktabelle bestimmte Felder auf korrekte Schreibweise die Kriterien hierzu stehen in einer zweiten Tabelle

        die komplexen Kriterien müssten eigentlich nur einmal geladen werden und nicht ständig bei jedem Funktionsaufruf

        die tausend aufrufe sind erforderlich weil er durch jeden Datensatz gehen muss

        wie kann ich den SQL Aufruf in der Funktionsdatei so auslagern das er nur einmal pro Sitzung aufgerufen wird.

        Kommentar


        • #5
          Hallo protestix,

          die Funktion.php wird natürlich über include_once in das ausführende php-script eingebunden.

          Ich persönlich halte ja nichts davon SQL-Abfragen in Funktionen zu packen, aber das muss jeder selber wissen.
          da geb ich dir recht wie machst du es dann bei deinen Funktionen?

          Kommentar


          • #6
            Zitat von HimDa Beitrag anzeigen
            wie kann ich den SQL Aufruf in der Funktionsdatei so auslagern das er nur einmal pro Sitzung aufgerufen wird.
            Indem du die Daten entweder in einer separaten Funktion abrufst (die du nur einmal aufrufst) oder halt im Script selber und dann der Funktion als Parameter übergibst.

            Kommentar


            • #7
              Hallo jonas3344,

              danke für deine schnelle antwort

              Indem du die Daten entweder in einer separaten Funktion abrufst (die du nur einmal aufrufst) oder halt im Script selber und dann der Funktion als Parameter übergibst.
              das will ich eigentlich ja gerade verhindern es in jedes script einzubauen denn das SQL-script ist sehr umfangreich
              wenn ich es in eine andere funktion einbaue verschiebe ich das problem nur oder? Es wird doch dann auch jedes mal wieder aufgerufen

              gibt es eine andere lösung?
              z.b. SQL ergebnis in ein array, array global und dann nur aufrufen wenn es noch nicht gesetzt wurde oder über static aber das hab ich nicht zum laufen bekommen hab wahrscheinlich einen denkfehler

              Kommentar


              • #8
                Zitat von HimDa Beitrag anzeigen
                wie kann ich den SQL Aufruf in der Funktionsdatei so auslagern das er nur einmal pro Sitzung aufgerufen wird.
                Du solltest aufhören in Dateien zu denken. Für PHP ist es an sich irrelevant, ob der gesamte Code in einer Datei oder in mehreren Dateien liegt. Die höhere Anzahl an Dateien dienen hauptsächlich uns Menschen den Überblick zu behalten und keine Dateien mit zigtausenden Zeilen Code lesen zu müssen.

                Wenn du eine Funktion nur einmal aufrufen willst, dann tu das doch, und ruf sie nicht 1000mal auf. Das liegt doch an dir, was passiert und was nicht passiert.

                Zitat von HimDa Beitrag anzeigen
                gibt es eine andere lösung?
                z.b. SQL ergebnis in ein array, array global und dann nur aufrufen wenn es noch nicht gesetzt wurde oder über static aber das hab ich nicht zum laufen bekommen hab wahrscheinlich einen denkfehler
                Vom Regen in die Traufe. Du tust dir selber einen Gefallen, wenn du Wörter wie "global" und "static" am besten gleich wieder vergisst. Sowas führt nur zur furchtbar schlecht wartbaren und sehr fehleranfälligen Code.

                Du kannst die Daten einmalig in ein Array laden und dieses Array dann als Funktionsparameter an alle Funktionen weiterreichen, die es benötigen.

                Kommentar


                • #9
                  Du musst halt dann die andere Funktion nur einmal zu Beginn aufrufen. Und nicht in der Schleife.

                  Kommentar


                  • #10
                    Du solltest auch das Script zeigen, wo das passiert, denn so sieht man ja den Fehler nicht.

                    Kommentar


                    • #11
                      hallo hellbringer,

                      du hast recht mit den dateien aber wie du schon sagst es hilft mit die übersicht zu behalten und ich kann die funktionen wie ich will in unterschiedlichen scripte wiederverwenden.
                      deshalb ja mein gedanke alles was die funktion benötigt und unverändert bleib auch im funktionsscript auszuführen.
                      Die Frage ist ja wie kann ich die SQL abfrage eben in dem funktionsscript nur eimal aufrufen und z.b das ergebnis in ein array ablegen welches bei einem erneuten aufruf der funktion nicht nochmals verarbeitet wird eben solange die sitzung des anwenders dauert
                      oder muss ich hier über session gehen

                      Kommentar


                      • #12
                        Hallo protestix,

                        ich bekomm keinen fehler das script läuft einwandfrei, bis auf die tausend Datenbankaufrufe die nicht sein müssten
                        Es geht rein um die geschwindigkeit des scripts

                        VG Stefan

                        Kommentar


                        • #13
                          Hallo Jonas3344,

                          eigentlich möchte ich für den Datenbankaufruf keine separate funktion erstellen ich hätte was zusammengehört gerne in einem script

                          VG Stefan

                          Kommentar


                          • #14
                            Und was hindert Dich dran eine Funktion zu schreiben welche zuerst einmalig die "Stammdaten" abfragt und speichert und anschliessend den Rest in der Schleife macht?

                            Funktionen haben Parameter, du musst halt alles übergeben was du benötigst. Das was du herumstudierst ist ziemlich unsauber. Wie hellbringer schon sagte, vergiss static und GLOBAL. Über eine Session könnte man nachdenken wenn es nicht viele Daten sind, aber wie schon gesagt, überleg Dir eine saubere Struktur welche den Code genauso oft ausführt wie du das benötigst.

                            Kommentar


                            • #15
                              Zitat von HimDa Beitrag anzeigen
                              du hast recht mit den dateien aber wie du schon sagst es hilft mit die übersicht zu behalten und ich kann die funktionen wie ich will in unterschiedlichen scripte wiederverwenden.
                              deshalb ja mein gedanke alles was die funktion benötigt und unverändert bleib auch im funktionsscript auszuführen.
                              Deine Denkweise ist falsch. Die Aussage "im Funktionsscript ausführen" ergibt irgendwie keinen Sinn. Es gibt Funktionen in PHP-Dateien, die kann man inkludieren und dann an anderen Stellen ausführen. Und dort darfst du die Funktion eben nur einmal ausführen.

                              Zitat von HimDa Beitrag anzeigen
                              Die Frage ist ja wie kann ich die SQL abfrage eben in dem funktionsscript nur eimal aufrufen und z.b das ergebnis in ein array ablegen welches bei einem erneuten aufruf der funktion nicht nochmals verarbeitet wird eben solange die sitzung des anwenders dauert oder muss ich hier über session gehen
                              Nein, deine Denkweise ist falsch. Ruf die Funktion nur einmal auf und speicher das Ergebnis in eine Variable, die du dann an die Funktionen weitergibts, wo sie benötigt werden.

                              Und bitte nicht eine Session für sowas missbrauchen, das ist absolut der falsche Weg und führt nur wieder zu anderen Problemen.

                              Sieh es einfach ein, dass deine Ansätze die falschen Ansätze sind. Mach einen Schritt zurück und geh es richtig an.

                              Kommentar

                              Lädt...
                              X