Verständnisproblem mysql_connect

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

  • Verständnisproblem mysql_connect

    Hallo zusammen,

    steige von einer anderen Sparche auf PHP um und habe da eine Verständnisproblem:

    Bevor Datenbankquerys gemacht werden können, muss ja der Kanal geöffnet (mysql_connect), die Datenbank selektiert (mysql_select_db) werden. Nach den Querys kommt ein mysql_close.

    Nun meine erste Frage:

    Ich setze ein größeres Projekt um und habe mehrere Framefenster in denen sich Inhalte aktualisieren und die unabhängig auf die selbe DB zugreifen. Wie wird das in der Praxis gemacht, muss vor jedem Datenbankzugriff die DB geöffnet, selectiert und dannach geschlossen werden oder kann/ soll man den DB Kanal bei Sitzungs Start nur einmal öffnen und dann beim beenden der Sitzung durch den User schliessen ?


    Dann habe ich noch eine zweite Frage:

    Falls das so ist, dass man vor jedem Datenbankzugriff die DB öffnet, selectiert und danach closed, wie macht man mehrere voeneinander unabhängige DB Kanäle auf ?

    Beispiel:

    PHP-Code:
        $verbindung mysql_connect($dbserver,$dbbenutzer,$dbpasswort)
                      or die(
    mysql_error());
        
    mysql_select_db($dbname) or die(_MYSQLNOCONNECT);
        

            
        
    $query "select forumid from forum_zugang_foren where gruppe=0 and userid=$userid and forum_erstellen=1";
        
    $result mysql_query($query) or die(mysql_error());
        while (
    $loop mysql_fetch_array($result,MYSQL_ASSOC)) {
        
    $forumid_tmp $loop["forumid"];
        
        
    //Hier ist die DB Verbindung ja schon geöffnet, die Funktion
     
    getclanname öffnet diese nochmal und greift auf die DB zuDas gibt dann 
    einen Fehler
    Wenn ich in der Funktion das Datenbank öffnen und 
    schliessen weglasse
    funktioniert esKann ich in der Funktion eine 
    Datenbankverbinung aufbauen 
    die die bereits geöffnete nicht stört Wen 
    ja wie 
    ?

            
    getclanname($clanname_tmp);
        
            
        }
        echo 
    '</select></td></tr>';
        @
    mysql_close($verbindung); 

    Für Tipps wäre ich dankbar.

  • #2
    ... oder kann/ soll man den DB Kanal bei Sitzungs Start nur einmal öffnen und dann beim beenden der Sitzung durch den User schliessen ?
    ob du es sollst, musst du mit geeigneten testläufen feststellen. es ist auf jeden fall möglich, schau dir folgendes mal an:

    http://de.php.net/manualen/function.mysql-pconnect.php
    http://www.phpfreaks.com/phpmanual/p...nnections.html
    http://www.mysqlperformanceblog.com/...nections-evil/
    und weiter mit google zu den einschlägigen schlüsselwörtern.

    Falls das so ist, dass man vor jedem Datenbankzugriff die DB öffnet, selectiert und danach closed, wie macht man mehrere voeneinander unabhängige DB Kanäle auf ?
    wozu brauchst du das? du sollst keine verbindung erneut aufbauen, sondern mit der bestehenden ein neues resultset bilden.

    allerdings muss gesagt werden, dass sql queries in schleifen (die von anderen queries abhängen) sehr unperformant sind und daher vermieden werden sollen (es gibt auch bedenken bzgl. der konsistenz, aber das kannst du dir natürlich selbst denken). mit hoher wahrscheinlichkeit lassen sie sich mit geeigneter db-architektur und join-statements umgehen.

    Kommentar


    • #3
      Danke für deine Antwort und die Links. Bin nun etwas schlauer.

      Eine DB Verbindung mit msql_connect() wird laut manual automatisch am Ende des scripts geschlossen. Das heisst, um nicht ständig kucken zu müssen ob eine Verbindung besteht oder nicht (z. B. wenn ich in Funktionen springe) mach ich die DB in meinem header.php auf und kümmer mich nicht weiter drum. So ist an jeder Stelle an denen ich queries mache das Ding offen.

      Nun noch ne Frage: Ist das sauber wenn man das so macht oder ist es nicht zu empfehlen ?

      Kommentar


      • #4
        optimal: öffnen - so spät wie nötig, schließen - so früh wie möglich.

        Kommentar


        • #5
          Okay, vielen Dank für die Info.

          Kommentar

          Lädt...
          X