Avatar billede jumping_jack Nybegynder
23. marts 2006 - 12:41 Der er 7 kommentarer og
1 løsning

en mysql close function

Hej.

Jeg har lavet en function der connecter til min DB,
sådan så jeg bare behøver at køre den function hver gang jeg skal connecte.
Og på grund af det, kan jeg ikke lave en mysql_close($db) i slutningen af den funktion.
Så derfor har jeg (prøvet at) lave en funktion der skal lave en mysql_close($HVADDENHEDFØR)
men det virker ikke. Den siger bare:
mysql_close(): supplied argument is not a valid MySQL-Link resource in

sourcen er her:


// Forbinder til databasen
    function dbconnect($midler){
        $midler = "$".$midler;
        #echo $midler;
        // inkludere filen med database oplysningerne
        include 'config.php';
       
        //sætter kode
        $this->dbHost        = $dbhost;
        $this->dbUser        = $dbuser;
        $this->dbPass        = $dbpass;
        $this->dbName        = $dbname;
       
        // forbindelsen oprettes
        $midler = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
        if(!$midler) die("Kunne ikke forbinde til databasen. " . mysql_error());
        mysql_select_db($this->dbName);
       
       
        #mysql_close($midler);
    }
   
    // skal lukke for forbindelsen
    function dbclose($midler){
        $bla = "$".$midler;
        mysql_close($db) OR DIE (mysql_error());
    }

og selvom jeg f.eks. skriver:

// Forbinder til databasen
    function dbconnect(){
        // inkludere filen med database oplysningerne
        include 'config.php';
       
        //sætter kode
        $this->dbHost        = $dbhost;
        $this->dbUser        = $dbuser;
        $this->dbPass        = $dbpass;
        $this->dbName        = $dbname;
       
        // forbindelsen oprettes
        $midler = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
        if(!$midler) die("Kunne ikke forbinde til databasen. " . mysql_error());
        mysql_select_db($this->dbName);
       
       
        #mysql_close($midler);
    }
   
    // skal lukke for forbindelsen
    function dbclose(){
        mysql_close($midler) OR DIE (mysql_error());
    }

vil den stadig ikke.
Er der nogen der kan forklare dette og måske fortælle hvordan jeg kan fikse det.
Hvis det ikke kan lade sig gøre, så må jeg ho bare lave det sådan at der skal være en connect og close i hver eneste function der skal bruge databasen.
Avatar billede ljm21 Praktikant
23. marts 2006 - 12:49 #1
Du lukker da forbindelsen i slutningen af din connectfunktion. Derfor kan du ikke lukke den igen...

Lars
Avatar billede jumping_jack Nybegynder
23. marts 2006 - 12:52 #2
#mysql_close($midler);

er udkommenteret
Avatar billede ljm21 Praktikant
23. marts 2006 - 12:56 #3
Det er den da også...

Så skal det være sådan noget som:
function dbconnect($midler){
        $midler = "$".$midler;
        #echo $midler;
        // inkludere filen med database oplysningerne
        include 'config.php';
     
        //sætter kode
        $this->dbHost        = $dbhost;
        $this->dbUser        = $dbuser;
        $this->dbPass        = $dbpass;
        $this->dbName        = $dbname;
     
        // forbindelsen oprettes
        $midler = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
        if(!$midler) die("Kunne ikke forbinde til databasen. " . mysql_error());
        mysql_select_db($this->dbName);
     
        return($midler)
        #mysql_close($midler);
    }
 
    // skal lukke for forbindelsen
    function dbclose($midler){
        $bla = "$".$midler;
        mysql_close($db) OR DIE (mysql_error());
    }
$midler = dbconnect();
brug $midler...
dbclose($midler);
Avatar billede jumping_jack Nybegynder
23. marts 2006 - 13:04 #4
Den vil stadig ikke virke.
Hvis vi f.eks. siger at nu bruger der ikke dbconnect(etllerandet) men bare dbconnect, så
skulle koden se sådan her ud:

function dbconnect(){
        // inkludere filen med database oplysningerne
        include 'config.php';
       
        //sætter kode
        $this->dbHost        = $dbhost;
        $this->dbUser        = $dbuser;
        $this->dbPass        = $dbpass;
        $this->dbName        = $dbname;
       
        // forbindelsen oprettes
        $hmm = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
        if(!$hmm) die("Kunne ikke forbinde til databasen. " . mysql_error());
        mysql_select_db($this->dbName);
       
       
    }
   
    // skal lukke for forbindelsen
    function dbclose(){
        mysql_close($hmm) OR DIE (mysql_error());
    }

for så bruger de begge jo $hmm og så SKULLE det gerne virke, men det gør det ikke
Avatar billede ljm21 Praktikant
23. marts 2006 - 13:07 #5
Problemet er at på den måde er $hmm kun kendt inden for futionen dbconnect. Når denne funktion afsluttes slettes alle de variabler der er lavet inden for den. Derfor skal du bruge return($hmm) for at få $hmm ud af funktionen, og du skal også kalde dbclose() med $hmm: dbclose($hmm).

Lars
Avatar billede jumping_jack Nybegynder
23. marts 2006 - 14:03 #6
Mange tak lars. så virker det sørme.
Smid et svar og du får nogle point
Avatar billede ljm21 Praktikant
23. marts 2006 - 16:09 #7
Velbekomme og på forhånd tak for point.

Jeg vil foreslå, at du smider den samlede løsning ind så andre med samme problem kan se løsningen.

Lars
Avatar billede jumping_jack Nybegynder
30. marts 2006 - 01:11 #8
Selvfølgelig gør jeg det :)

Her er en class, som gør det muligt for vedkommende at ændre db oplysningerne, forbinde og stoppe forbindelsen.
Håber der kan hjælpe nogle :)

Kode:


<?
class db{
   
    // Sætter variabler
    var $userID,
            $dbHost,
            $dbUser,
            $dbPass,
            $dbUserTable;
    // sætter constructer
    function db(){
               
        //sætter db oplysninger
        $this->dbHost        = "localhost";
        $this->dbUser        = "root";
        $this->dbPass        = "";
        $this->dbName        = "test";
    }
   
    // lader brugeren sætte database oplysningerne
    function setDB($host, $user, $pass, $name){
        //sætter kode
        $this->dbHost        = $host;
        $this->dbUser        = $user;
        $this->dbPass        = $pass;
        $this->dbName        = $name;
    }
   
    // Forbinder til databasen
    function dbconnect(){
       
        // forbindelsen oprettes
        $dbconnect = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
        if(!$dbconnect) die("Kunne ikke forbinde til databasen. " . mysql_error()){
        mysql_select_db($this->dbName);
        }
        return $dbconnect;
       
    }
   
    // skal lukke for forbindelsen
    function dbclose($dbconnect){
        mysql_close($dbconnect) OR DIE (mysql_error());
    }
}
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester