Datenbankverbindung

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

  • Datenbankverbindung

    Mahlzeit!

    Wie löst man am geschicktesten eine Datenbankverbindung?

    OK, man kann am Anfang eines Scriptes ne Datei includen, die die Verbindung herstellt und die DB auswählt, aber das ist irgendwie zu einfach

    Wenn man noch die Anzahl der Queries zählen will oder die gesamte Abfragezeit und solche Scherze, dann braucht man wohl am besten ne Datenbankklasse. Das Problem dabei ist nur, dass andere Klasse auch auf die DB zugreifen möchten und logischerweise alle das gleiche Objekt benutzen sollen, damit das zählen der Queries usw. klappt. Dazu muss man das Datenbankobjekt aber in die anderen Klassen mittels global importieren, aber das ist auch keine schöne Lösung.

    Wie macht man sowas am besten ?
    hopka.net!

  • #2
    zu dem thema hat tobi schon mal was aufgemacht...

    ich habe es bei mir so gemacht....

    PHP-Code:
    $db = new database();

    $gb = new guestbook(&$db);
    $ne = new news(&$db);
    $fo = new forum(&$db);
    // usw. 
    in den classes machst du jeweils dieses

    PHP-Code:
    class news
    {
      var 
    $_db NULL;

      function 
    news($dblink)
      {
        
    $this->_db $dblink;
      }

      function 
    get_news()
      {
        
    this->_db->sql('SELECT * FROM news'//  usw.
      
    }

    nun kannst du am ende aller ausgabe, deine zusammengezählten queries im hauptscript ausgeben.

    PHP-Code:
    echo $db->get_querycounter(); 
    das ist meine spezielle kurze lösung. es funktioniert bei mir prima. bis auf den counter... den werde ich aber nach deiner inspiration noch einbauen....
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Die Idee is mir auch gekommen als ich nochmal drüber nachgedacht hab.

      Mittlerweile hab ich es auch so hingekriegt, das es funktioniert

      PHP-Code:
      class news
      {
        var 
      $_db NULL;

        function 
      news(&$dblink)      <-------- da
        
      {
          
      $this->_db =& $dblink;     <------- da auch *g*
        }

        function 
      get_news()
        {
          
      this->_db->sql('SELECT * FROM news'//  usw.
        
      }

      P.S.:
      muss man dieses = NULL wirklich machen? is das nich eh so ?
      Zuletzt geändert von Hopka; 01.09.2003, 17:28.
      hopka.net!

      Kommentar


      • #4
        Original geschrieben von Hopka
        muss man dieses = NULL wirklich machen? is das nich eh so ?
        probier's aus *g*

        aber selbst wenn's jetzt sois, wer garantiert dir, dass nicht initialisierte klassenvariablen immer den wert NULL haben?

        du weist ja diesen initalwert normalerweise deshalb zu, damit du einen wohl definierten ausgangszustand hast und damit du prüfen kannst, ob deiner klasse ein objekt der datenbankklasse übergeben wurde

        wenn die klassenvariable irgendwann den WERT __UNDEFINED__ (ähnlich __FILE__) bekämen, würdest du bös auf die nase fliegen, wenn du diese prüfung mit !is_null machst


        wenn du sie initialisierst, isses auf keinen fall schlechter denk ich
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Original geschrieben von Hopka
          Mittlerweile hab ich es auch so hingekriegt, das es funktioniert
          das ist doch das gleiche wie im meiner demo, bis auf das & , welches ich bereits bei der übergabe verwende.

          und zum thema NULL hat happy dir ja schon was gepostet...
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Original geschrieben von Abraxax
            das ist doch das gleiche wie im meiner demo, bis auf das & , welches ich bereits bei der übergabe verwende.
            richtig, bis auf das &. und wenn ich das an einer Stelle weglasse läuft es nimmer richtig.

            Original geschrieben von mrhappiness
            aber selbst wenn's jetzt sois, wer garantiert dir, dass nicht initialisierte klassenvariablen immer den wert NULL haben?
            steht im PHP-Handbuch:
            Eine Variable wird als NULL interpretiert, wenn
            • ihr die Konstannte NULL als Wert zugewiesen wurde.
            • ihr bis jetzt kein Wert zugewiesen wurde.
            • sie mit unset() gelöscht wurde.
            Klassenvariablen sind doch auch Variablen.

            Original geschrieben von mrhappiness

            du weist ja diesen initalwert normalerweise deshalb zu, damit du einen wohl definierten ausgangszustand hast und damit du prüfen kannst, ob deiner klasse ein objekt der datenbankklasse übergeben wurde

            wenn die klassenvariable irgendwann den WERT __UNDEFINED__ (ähnlich __FILE__) bekämen, würdest du bös auf die nase fliegen, wenn du diese prüfung mit !is_null machst


            wenn du sie initialisierst, isses auf keinen fall schlechter denk ich
            Jo, da is was dran, aber um solche Prüfungen hab ich mich bisher noch nicht wirklich gekümmert. Aber ich hab deine Argumentation verstanden Mein Informatiklehrer sagt auch immer, dass man die Variablen initialisieren muss, aber naja, bei "echten" Programmiersprachen muss man das ja auch wirklich.
            hopka.net!

            Kommentar


            • #7
              echte programmiersprachen?
              so wie c(++)?

              int i;
              cout >> i;

              geht doch auch oder?
              (eventeull sind die >> verkehrt rum, aber vom prinzip her)
              und das mit php-handbuch: momentan isses so, es macht dir ja auch niemand nen vorwurf oder sagt: Hopka, bist du narrisch? so kannst du doch net programieren

              aber man weiß einfach wirklich nie, wann die was ändern (war bei register_globals und $_SESSION/session_register ja auch so)
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                zu dem thema hat tobi schon mal was aufgemacht...
                Hab ich?
                EDIT:
                Stimmt, erinnere mich (dachte zuerst zum Thema dbklasse) . Also als Extra objekt in die entsprechende lasse halte ich für am sinnvollsten.

                Kommentar


                • #9
                  Original geschrieben von mrhappiness
                  echte programmiersprachen?
                  so wie c(++)?
                  Turbo-Pascal
                  Original geschrieben von mrhappiness
                  int i;
                  cout >> i;

                  geht doch auch oder?
                  (eventeull sind die >> verkehrt rum, aber vom prinzip her)
                  Ja, ich glaube die sind verkehrt rum (is aber schon über 1½ Jahre her, dass ich C++ programmiert habe )

                  Aber ich meinte das so, dass man sich bei den "echten" Sprachen nicht drauf verlassen kann, dass immer der gleiche Wert drinsteht, weil ja irgendwelche zufälligen Werte drin stehen, die grade im Speicher sind (sagt zumindest mein Info-Lehrer)
                  hopka.net!

                  Kommentar


                  • #10
                    Original geschrieben von Hopka
                    Aber ich meinte das so, dass man sich bei den "echten" Sprachen nicht drauf verlassen kann, dass immer der gleiche Wert drinsteht, weil ja irgendwelche zufälligen Werte drin stehen, die grade im Speicher sind (sagt zumindest mein Info-Lehrer)
                    genau so ist es auch. bei php könnte sowas durchaus auch kommen. wer weiss.....

                    und noch was, zum vordefinieren von vars an sich. wenn du in der php.ini alle warnings/notices aktivierst, so wird auch eine info ausgegeben, wenn du eine var nicht initialisierst. und wenn du das nicht machst, kommen viele lustige meldungen bei mir auf der maschine und dein script läuft u.u. nicht mehr einwandfrei.

                    also immer vordefinieren und mit isset() prüfen.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar

                    Lädt...
                    X