Funktion für connect zu Datenbank

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

  • Funktion für connect zu Datenbank

    Hallo,
    ich habe leider nichts vergleichbares gefunden. Sollten es soetwas bereits in Scriptform geben, würde ich mich freuen, wenn mir jemand die Adresse verrät.
    Worum geht es?
    Ich habe mir zwei Routinen geschrieben, die das Öffnen und Schließen meiner Datenbank vornehmen, damit man sich in allen anderen Funktionen schreibarbeit spart. Nebenher sollen die Routinen gewisse Datensätze noch manuell blockieren, damit auf diese nicht zugegriffen werden kann, wenn sie bearbeitet werden.
    Leider treten hin und wieder folgende Probleme auf:
    1. Ich rufe connectDB() auf und hinterher funktioniert mein mysql_query() nicht, weil scheinbar die $link VAriable nicht mehr richtig gesetzt ist (also ein Wert steht schon drin und der query ist 100% richtig, habs im phpMyAdmin getestet, nur der link scheint, vielleicht durch ein vorheriges close nicht mehr brauchbar zu sein.
    2. vielleicht liegt dieses Problem auch daran, dass ich Funktionen und somit auch die connects und close geschachtelt aufrufe ...
    3. Manchmal, wenn ich das connect bzw close mit dem PArameter $id aufrufe, kann close den Datensatz nicht schliessen, wieder selbes PRoblem wie in 1. beschrieben

    Ich hoffe jemand hat eine Idee, wo das Problem liegen kann. Ich hab bereits den Tip bekommen, dass es daran liegen kann, das $link_db global ist, konnte damit jedoch nicht viel anfangen, weil ich nicht weiss was ich ändern könnte

    PHP-Code:
            $count_db 0;
        
    $link_db = -1;
        function 
    connectDB($id = -1) {
            global 
    $db_table$db_name$db_login$db_pass$einstellung$count_db$link_db;

            if (++
    $count_db 1) {
               return 
    $link_db;
            }

            
    $link_db = @mysql_connect$db_name$db_login$db_pass)
                or die (
    "Es konnte keine Verbindung mit dem Datenbankserver hergestellt werden");
            
    $select_db = @mysql_select_db $db_table$link_db )
                or die (
    "Die Datenbank wurde nicht gefunden. Wenden sie sich an den Admin");

            if (
    $id != -1) {
                
    // ändern anmelden beim eintritt in funktion
                // wenn bereits geändert wird, warten bis der datensatz wieder verfügbar ist
                // maximal 10 sekunden warten, dann abrechen und von einem Fehler ausgehen

                
    $start time();
                do {
                    if (
    time() - $start 10) {
                        
    $query "SELECT couldnotload FROM spieler WHERE ID='$id' LIMIT 1";
                        
    $result = @mysql_query($query$link_db)
                            or die (
    "Datenänderung kann nicht initialisiert werden: ".mysql_error());
                        
    $object = @mysql_fetch_object($result);
                        if(
    $object->couldnotload >= 2) {
                                                    
    // bei zu vielen Versuchen Datensatz wieder freigeben
                            
    $query "UPDATE spieler SET couldnotload=0, changing=0 WHERE ID='$id' LIMIT 1";
                        }
                        else {
                            
    $query "UPDATE spieler SET couldnotload=couldnotload+1 WHERE ID='$id' LIMIT 1";
                        }
                        
    $result = @mysql_query($query$link_db)
                            or die (
    "Datenänderung kann nicht initialisiert werden: ".mysql_error());

                        die (
    "Zeitüberschreitung der Anfrage. ");
                    }

                    
    // ändern anmelden, wenn möglich
                    
    $query "UPDATE spieler SET changing=1 WHERE ID='$id' AND changing=0 LIMIT 1";
                    
    $result = @mysql_query($query$link_db)
                        or die (
    "Datenänderung kann nicht initialisiert werden: ".mysql_error());

                }while( !@
    mysql_affected_rows($link_db) );

            }
            
            return 
    $link_db;
        }



        function 
    closeDB($link$id = -1) {
            global 
    $connected$count_db$link_db;
                    
            if (
    $id != -1) {
                
    $query "UPDATE spieler SET changing=0 WHERE ID=$id LIMIT 1";
                
                
    $result mysql_query($query$link_db)
                    or die(
    mysql_error()."dbC $count_db ".$GLOBALS["DIE1"].$id.$GLOBALS["DIE2"]);
            }

            if(--
    $count_db == 0) {
                @
    mysql_close($link_db);
            }

        } 
    verantwortlich für Elygor - Das kostenlose Browserspiel

  • #2
    wenn du folgendes machst:

    [code]
    connect()
    query()
    close()
    query()
    [code]

    kann es nicht mehr funktionieren, weil du dir die Connection geschlossen hast!

    warum kapselst du das nicht in einem Objekt ??

    alternativ mach das close erst am ende der seite!

    gruss

    Kommentar


    • #3
      ähm,

      ich mache kein query nach nem close! am anfang der funktion steht ein connect, am ende ein close und nur dazwischen queries und evtl funktionsaufrufe die nach dem selben muster aufgebaut sind ...

      hab keine objecte genommen weil objektorientierung noch in den kinderschuhen war als ich mit dem projekt begonnen habe ...
      verantwortlich für Elygor - Das kostenlose Browserspiel

      Kommentar


      • #4
        Guck mal, ich habe die angehängte DB-Class irgendwo her gefischt und für mich angepasst und erweitert. Ich benutze die eigentlich so gut wie immer weil sie halt ziemlich einfach ist.

        Servus

        Yeza
        Angehängte Dateien
        mens agitat molem

        Kommentar


        • #5
          hm dfanke, funzt das auch wenn man mehrere objekte gleichzeitig in verschiedenen funtkionen benutzt? hat vielleicht jemand ne version ohen objekte?
          verantwortlich für Elygor - Das kostenlose Browserspiel

          Kommentar


          • #6
            sEeb, was ist an den objekten so schlimm?
            aber mal eben eine offtopic-frage: kannst du mir ein beispiel geben, wie man zwei objekte gleichzeitig benutzt?

            Kommentar


            • #7
              ich mein das objekt einmal in der einen ufunktion udn dann in ner funktion in der es aufgerufen wird

              das problem an dem objekt ist, dass ich über 100 funktionen habe, die ich mit objekt alle ändern müsste, daher wäre es sehr viel besser, den fehler in der bisherigen funktionen connect und close zu beheben, falls da jemand soviel ahnung von hat dass er helfen kann ...
              verantwortlich für Elygor - Das kostenlose Browserspiel

              Kommentar


              • #8
                hat das noch nie jemand ausprobiert? hat da keiner ne ahnung von?
                verantwortlich für Elygor - Das kostenlose Browserspiel

                Kommentar

                Lädt...
                X