Ankündigung

Einklappen
Keine Ankündigung bisher.

Best Practice: Datenbankabfragen

Einklappen

Neue Werbung 2019

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

  • Best Practice: Datenbankabfragen

    Hallo,

    wollte mal fragen wie ihr das so handhabt mit den Abfragen gegen die Datenbank. Derzeit nutze ich eine selbstgeschriebene Klasse die mir die Statements baut. Doch ich erreiche je komplexer die Abfragen werden immer öfter die Grenzen des machbaren der Klasse.

    Wie macht ihr das b.z.w wie ist da die beste herangehensweise? Ich bin mittlerweile soweit das ich denke das es am sinnvollsten ist die Statements einfach so abzufeuern wie von PHP vorgesehen ohne weiteren Schnickschnack.

  • #2
    Kannst mal etwas genauer spezifizieren was du meinst ?
    Also was deine Klasse(n) machen/können [sollen] ?

    Geht es dir darum dbms-unabhängiges sql ala z.b. sowas wie Javas Hibernate in Form von HQL hat oder in der PHP-Welt Doctrine DQL hat ?

    PHP-Code:
    $query = new MyQuery();
    $query->select()->from('someTable')->leftJoin('anotherTable')->where('someTable.baa = ?''blub')->andWhere('anotherTable.foo = ?''bla')->orderBy('foo DESC')->limit(30);
    $result $query->execute(); 
    Also was sind deine Ziele ?

    Datenbankunabhängigkeit ?
    Mächtigere Query-Builder-Klasse ?
    Speziellere Features ?
    [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
    | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

    Kommentar


    • #3
      Deine Datenbankklasse sollte immer das Abfeuern von manuell gebauten Queries unterstützen, dann kannst du an gar keine Grenzen stossen. Zusätzlich kannst du ja Methoden anbieten, die dir übliche Queries schneller und bequemer zusammenbaut. So wie von robo47 vorgeschlagen in etwa, nur dass ich den Query-Builder von der Datenbankklasse entkoppeln würde, wie etwa bei Zend_Db (Adapter) und Zend_Db_Select (SELECT-Builder). Wenn dein SELECT-Builder jetzt auch noch eine __toString()-Methode implementiert, muss die DB-Klasse nicht mal den SELECT-Builder kennen.
      "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

      Kommentar


      • #4
        Ich wollte eigentlich nur mal hören wie es die eingefleischten PHP Developer handhaben. Ich komme ja eigentlich aus der .Net Welt.

        Ich habe mir zwar eine Klasse geschrieben die mein Arbeiten zuvor auch beschleunigt und erleichtert hat. Doch mittlerweile sehe ich keinen effektiven nutzen mehr darin da die Statements deutlich komplexer werden und die Klasse da nicht mehr mithalten kann.

        Kommentar


        • #5
          Ich nehme PDO weil ich zu faul bin, das Rad neu zu erfinden.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Zitat von tarian Beitrag anzeigen
            Ich wollte eigentlich nur mal hören wie es die eingefleischten PHP Developer handhaben.
            Primär wohl erstmal schauen welche Räder es schon gibt und ob die Räder an den eigenen Wagen passen.


            Jenachdem was man will und braucht gibt es ja schon diverse Systeme, fast jedes Framework bringt im Datenbank-Bereich nen Abstraktions-Layer oder sogar ORM-System mit das auf PDO/mysql(i)/etc aufbaut.

            Zend_Db
            APF Generic OR Mapper

            Dazu kommen dann reine ORM-Systeme wie Doctrine1 und Propel und mittlerweile Doctrine2 das eine komplette Auftrennung in Komponenten hat, sprich einerseits DBAL (DataBase Abstraction-Layer), andererseits ORM (Object Relational Mapping). Doctrine1/2 bietet daneben auch noch Migrationen von DB-Schemata an.

            Weitere DBLA oder ORM-Systeme:

            Adodb
            PEAR_Mdb2
            Creole
            [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
            | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

            Kommentar


            • #7
              Schau dir doch mal den GenericORMapper von dem APF-Framework an. Ich kann dir nur empfehlen: erfinde das Rad nicht neu, sondern nutze das APF! Mit dem GenericORMapper kannst du ganz leicht Datenbanken abfragen.

              Kommentar


              • #8
                Ich funke nur ungern dazwischen, aber ich persönlich sehe nach wie vor keinen Vorteil darin, sich die Abfrage mittels einer Klasse zusammenzubauen. Schreibarbeit hat man mehr oder weniger diesselbe, einen echten Mehrwert sehe ich jedoch nicht. Gerade mit PDO gestalten sich Datenbankabfragen sehr leicht und übersichtlich.

                Kommentar


                • #9
                  Ja habe ein ähnliches Gefühl wie Trainmaster. Deswegen auch dieser Thread

                  Kommentar


                  • #10
                    meiner meinung nach , liegt der vorteil in solchen klassen, die verwendung. es sind halt ein paar zeilen weniger zu tippen zb:

                    PHP-Code:
                    $sql mysq_query("SELECT * FROM users");
                    while(
                    $row mysql_fetch_object($sql)){

                    echo 
                    $row->username;

                    oder
                    PHP-Code:
                    while($row Users->fetchAll()){
                    echo 
                    $row->username;

                    nachteil besteht darin, dass nicht wirklich nötige funktionen/methoden/klassen aufgerufen werden und somit ein wenig overhead erzeugen, bei manchen anwendungen spielt es keine rolle, bei anderen aber schon.(bezogen auf ausführungsgeschwindigkeit)

                    ich persönlich benutze die einfach variante von PDO ohne einen ORM , dieses erweitere ich ein wenig damit ich nicht immer per hand escapen muss, das ist das einzige was meine klasse tut.

                    Man muss ja nicht jedem trend folgen dem endbenutzer ist es ja eh im grunde schnuppe, hauptsache er hat auf der seite die funktionen die er benötigt

                    MFG
                    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                    Kommentar


                    • #11
                      Also ich arbeite sehr gerne mit Select-Objekten. Finde das von Zend (Zend_Db_Select) eigentlich sehr gut nur leider hat das einige Bugs drin und für meinen Geschmack fehlende/unvollkommene features...
                      Also hab ich mir kurzerhand eine eigene Db_Select Klasse gebaut, die mittlerweile auch in allen neuen Projekten benutze.
                      Den Vorteil solcher Klassen sehe ich einfach darin, dass man dieses Objekt einfach innerhalb einer Klasse oder auch an andere Klassen weiterreichen kann, dieses dort modifiziert werden kann und man am Ende dann ein korrektes SQL-Statement hat.

                      ganz wichtig ist dabei, wie mein Vorredner gesagt hat:
                      Zitat von Chriz Beitrag anzeigen
                      Deine Datenbankklasse sollte immer das Abfeuern von manuell gebauten Queries unterstützen
                      "My software never has bugs, it just develops random features."
                      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                      Kommentar


                      • #12
                        ORM. Als fertige Lösung würde sich da Doctrine anbieten.
                        Programming today is a race between developers striving to build better idiot-proof programs, and the universe trying to produce better idiots. So far, the universe is winning.

                        Kommentar


                        • #13
                          Je nach Anwendungszweck. @ Trainmaster: Na dann setz mal ein komplexes Userinterface um, mit sortierbaren Spalten, Freitext- und kombinierbaren Suchparametern etc. Du machst Dir keine Vorstellungen, wie unübersichtlich das werden kann.
                          [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


                          • #14
                            sortierung gehört ins JS meiner meinung nach.. aber hast schon recht, im grunde dienen ORMs nur für schneller ließbare zeilen , weniger tipparbeit und schnellere produktion
                            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                            Kommentar


                            • #15
                              Zitat von BlackScorp Beitrag anzeigen
                              sortierung gehört ins JS meiner meinung nach.. aber hast schon recht, im grunde dienen ORMs nur für schneller ließbare zeilen , weniger tipparbeit und schnellere produktion
                              Wofür sollten Sie sonst gut sein? Ist doch das gleiche wie bei Frameworks.

                              Kommentar

                              Lädt...
                              X