Ankündigung

Einklappen
Keine Ankündigung bisher.

mysqli, bind_param und variable Variablenanzahl

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von nikosch Beitrag anzeigen
    Gegenfrage: Was ist falsch an diesem Prinzip?
    Hier geht es nicht um Prinzipien, sondern wie ich an die Instanz eines Objektes komme.

    Zitat von Flor1an Beitrag anzeigen
    Da gibt es diverse Möglichkeiten. Singleton-Pattern, Registry-Pattern sind die ersten die mir dazu einfallen würden.
    Klingt aber auch nicht gerade nach nativem PHP.

    So was ähnliches habe ich auch schon überlegt. man könnte doch eine Dummy Klasse als mysqli Superklasse erstellen die lediglich eine Singleton-Funktion ausübt.

    PHP-Code:
    class Database extends mysqli {

       protected static 
    $singleton=null;

       protected function 
    __construct(){}
       protected function 
    __sleep(){}
       protected function 
    __clone(){}

       public static function 
    init() {
          if (
    self::$singleton===null) {
             
    self::$singleton=new self -> connect (HOST,USER,PASS,DB);
          }
          return 
    self::$singleton;
       }


    Nur noch so ausbauen das nicht ständig der selbe Code geschrieben werden muss sondern wie bei einer Funktion nur der Query übergeben wird.

    Kommentar


    • #17
      Hier geht es nicht um Prinzipien, sondern wie ich an die Instanz eines Objektes komme.
      Keine Antwort ist auch ne Antwort.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #18
        Zitat von nikosch Beitrag anzeigen
        Keine Antwort ist auch ne Antwort.
        Wenn du schon so großen Wert auf Prinzipien legst, dann solltest du wissen das es unhöflich ist eine Frage mit einer Gegenfrage zu beantworten. Und wenn man schon selber Fragen ausweicht/unbeantwortet lässt, dann sind solche Kommentare nur noch peinlich!

        Kommentar


        • #19
          Wo liegt Dein Problem?!
          Wer redet von Prinzipien? Ich rede von einem Code-Prinzip, das DB-Objekt von außen zu übergeben, das völlig legitim ist. Nennt sich „Dependency Injection“ in seiner einfachsten Ausprägung.

          das es unhöflich ist eine Frage mit einer Gegenfrage zu beantworten
          Pff, na-nu aber!
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #20
            Zitat von Yitu Beitrag anzeigen
            So was ähnliches habe ich auch schon überlegt. man könnte doch eine Dummy Klasse als mysqli Superklasse erstellen die lediglich eine Singleton-Funktion ausübt.

            Nur noch so ausbauen das nicht ständig der selbe Code geschrieben werden muss sondern wie bei einer Funktion nur der Query übergeben wird.
            In vielen Frameworks wird ein kompletter Wrapper um die Datenbankfunktionen geschrieben. Der dann auch noch etwas mehr bietet. Wie zum Beispiel: Debugging, verschiedene DB Adapter (mysql, oracle, sqlite, etc), Logging und so weiter.

            Die Frage ist einfach was du möchtest. Willst du nur ne total simple Anwendung haben kann die DB auch irgendwo im globalen Namespace rumgammeln, wenn du aber eine Objekt orientierte Architektur haben möchtest solltest du dir genau Gedanken machen wie du generell mit Objekten umgehen möchtest. Es gibt nicht nur das Datenbankobjekt das global verfügbar sein soll. Für sowas reicht dann "natives" PHP nicht aus, da musst du dir dann schon dein Konzept implementieren.

            Kommentar


            • #21
              Zitat von nikosch Beitrag anzeigen
              Ich rede von einem Code-Prinzip, das DB-Objekt von außen zu übergeben, das völlig legitim ist. Nennt sich „Dependency Injection“ in seiner einfachsten Ausprägung.
              Ich habe auch nie die Legitimation sondern die Tatsache angeprangert, dass die Instanz übergeben werden muss um auf sie zuzugreifen zu können, und zwar bei jeder Funktion/Klasse die diese benötigt.

              Alternativ müsste man die DB-Klasse in jedem Objekt instanzieren, dass aber wiederum würde bedeuten, das genau wie bei der Funktion zwar nicht jeder Query eine eigene Verbindung aufbaut aber jedes Objekt für sich, dann gäbe es halt von 10 Abfragen nicht 10 Verbindungen sondern nur 7, toll!

              Kommentar


              • #22
                Zitat von Flor1an Beitrag anzeigen
                In vielen Frameworks wird ein kompletter Wrapper um die Datenbankfunktionen geschrieben. Der dann auch noch etwas mehr bietet. Wie zum Beispiel: Debugging, verschiedene DB Adapter (mysql, oracle, sqlite, etc), Logging und so weiter.
                Bei Frameworks muss man deren Struktur adaptieren, dass ist nicht so meine Ding.

                Zitat von Flor1an Beitrag anzeigen
                Die Frage ist einfach was du möchtest. Willst du nur ne total simple Anwendung haben kann die DB auch irgendwo im globalen Namespace rumgammeln, wenn du aber eine Objekt orientierte Architektur haben möchtest solltest du dir genau Gedanken machen wie du generell mit Objekten umgehen möchtest. Es gibt nicht nur das Datenbankobjekt das global verfügbar sein soll. Für sowas reicht dann "natives" PHP nicht aus, da musst du dir dann schon dein Konzept implementieren.
                Das hauseigene mysqli reicht mir vollkommen als Datenbank Objekt. Ich suche lediglich eine bequeme Möglichkeit von jedem Punkt aus im Skript Daten aus der Datenbank abzurufen ohne vorher immer die dafür nötige "Infrastruktur" aufzubauen.

                Würde ein einfaches...

                PHP-Code:
                $result=mysqli::query("SELECT * FROM ...."); 
                reichen, wäre diese Diskussion überflüssig.

                Kommentar


                • #23
                  Würde ein einfaches...
                  reichen, wäre diese Diskussion überflüssig.
                  Eine Diskussion ist nur dann überflüssig, wenn man nicht bereit ist, über die angeführten Sachen nachzudenken.

                  Ich habe auch nie die Legitimation sondern die Tatsache angeprangert, dass die Instanz übergeben werden muss um auf sie zuzugreifen zu können, und zwar bei jeder Funktion/Klasse die diese benötigt.
                  Bei jedem Objekt (nicht Klasse) ja, bei jeder Methode nicht (falls Du das mit Funktion meintest). Ein Objekt kann sich die Instanz dann als Property ablegen.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #24
                    Zitat von nikosch Beitrag anzeigen
                    Bei jedem Objekt (nicht Klasse) ja, bei jeder Methode nicht (falls Du das mit Funktion meintest). Ein Objekt kann sich die Instanz dann als Property ablegen.
                    Nein, ich meine Funktion nicht Methode. Eine Instanz die außerhalb einer Funktion/Klasse erstellt wurde muss übergeben werden oder innerhalb des Objektes erneut instanziert werden, dass ist mein Anliegen.

                    Und dabei ist es nicht einmal explizit das, sondern die Tatsache das hier Prozesse verarbeitet werden, die jedes mal berücksichtigt werden müssen anstelle eine Funktion aufzurufen die das komplett abarbeitet.

                    Nur ein Beispiel, wenn ein SQL Fehler auftaucht, wird eine Funktion aufgerufen die diesen Fehler in eine Log-Datei schreibt.

                    Kommentar


                    • #25
                      imho sind Funktionen hier schlicht ungeeignet. Ich finde auch, dass bspw. Fehlerverarbeitung innerhalb einer Anwendung durchaus verschieden ablaufen kann. Ein Fehler ist vielleicht kritisch, einer fordert nur eine Startseite an oder erfordert ein Rollback oder wirft eine Exception...
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #26
                        Zitat von nikosch Beitrag anzeigen
                        imho sind Funktionen hier schlicht ungeeignet. Ich finde auch, dass bspw. Fehlerverarbeitung innerhalb einer Anwendung durchaus verschieden ablaufen kann. Ein Fehler ist vielleicht kritisch, einer fordert nur eine Startseite an oder erfordert ein Rollback oder wirft eine Exception...
                        Es geht nicht um die Art der Fehlerverarbeitung oder deren Einstufung, sondern darum dass unter Anderem dies berücksichtigt werden muss sobald eine Verbindung zur Datenbank aufgebaut wird. Und daraus folglich eine Redundanz entsteht.

                        Wenn man für sich wiederholende Abläufe aber keine Funktion braucht, für was dann? Das einzige negative an dieser Funktion ist das bereits von Flor1an angesprochene "Connect per Query" Problem, was aber bei der Instanziierung sowieso entsteht und somit mehr oder weniger relativiert.

                        //EDIT
                        Und ja, einen bitteren Nachgeschmack verspüre ich bei dieser Lösung auch und bin dankbar für Alternativen so fern welche angeboten werden.

                        Kommentar


                        • #27
                          was aber bei der Instanziierung sowieso entsteht
                          Stimmt schlichtweg nicht. Anscheinend hast Du immer noch nicht verstanden. Niemand hat hier gesagt, dass Du in jedem Kontext, wo Du DB-Daten verarbeitest, ein neues mysqli-Objekt instanziieren sollst.
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #28
                            Zitat von nikosch Beitrag anzeigen
                            Stimmt schlichtweg nicht. Anscheinend hast Du immer noch nicht verstanden. Niemand hat hier gesagt, dass Du in jedem Kontext, wo Du DB-Daten verarbeitest, ein neues mysqli-Objekt instanziieren sollst.
                            Ich benötige aber in über 30 Objekten eine Verbindung zur Datenbank, die Frage wie ich auf ein instanziiretes DB-Objekt zugreifen kann ohne es vorher übergeben oder erneut instanziiert zu haben, wurde ja immer noch nicht beantwortet.

                            Kommentar


                            • #29
                              Doch wurde sie. Und zusätzlich habe ich gesagt, dass es nicht zwingend ohne Übergabe sein muss. Aber Du willst ja gar nichts - keine Pattern/Frameworks, keine Parameter, lieber Neuinstanziierung und Arbeiten mit Funktionen (?!), obwohl allein schon mysqli selbst OOP ist.
                              [COLOR="#F5F5FF"]--[/COLOR]
                              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                              [COLOR="#F5F5FF"]
                              --[/COLOR]

                              Kommentar


                              • #30
                                Zitat von nikosch Beitrag anzeigen
                                Doch wurde sie. Und zusätzlich habe ich gesagt, dass es nicht zwingend ohne Übergabe sein muss.
                                Na dann wirst du ja keine Probleme haben die Antwort zu Quoten.

                                Zitat von nikosch Beitrag anzeigen
                                Aber Du willst ja gar nichts - keine Pattern/Frameworks, keine Parameter, lieber Neuinstanziierung
                                Richtig, ich will keine Pattern keine Frameworks etc. Aber was hat das mit meinem DB-Objekt zu tun?

                                Zitat von nikosch Beitrag anzeigen
                                ...und Arbeiten mit Funktionen (?!), obwohl allein schon mysqli selbst OOP ist.
                                Wer sagt das Funktionen kein OOP ist?
                                Wer sagt das diese Funktion MySQLi ersetzt oder dessen Funktionalität übernimmt?

                                Kommentar

                                Lädt...
                                X