Avatar billede freesoft Praktikant
28. oktober 2004 - 12:48 Der er 37 kommentarer og
3 løsninger

Connecte 1 gang til MySQL?

Hej
Hvordan laver man i PHP sådan at man kun skal connecte 1 gang til MySQL pr. side?

Min side henter titlen på siden og så noget tekst og noget andet fra databasen.

Kan man gøre så den kun skal connecte 1 gang for at hente det hele?
På en nem måde?

Mvh. Kim/FreeSoft
Avatar billede Slettet bruger
28. oktober 2004 - 12:53 #1
du kan jo bare lave de 3 forespørgsler lige efter hindanden, hvor du smider resultatet over i forskellige variabler..
Avatar billede jakobdo Ekspert
28. oktober 2004 - 12:59 #2
Du kunne jo lave en include i toppen af din side, hvor du connecter til din database...
Så kan du lave alle de queries du vil ned over siden!
Avatar billede Slettet bruger
28. oktober 2004 - 13:02 #3
du behøver jo ikke lukke forbindelsen efter en query..
Avatar billede jakobdo Ekspert
28. oktober 2004 - 13:05 #4
Præcis, som Gartzen siger, så er det ikke nødvendigt at lukke en connection efter brug, den lukkes automatisk når scriptet er done.
Avatar billede freesoft Praktikant
28. oktober 2004 - 13:17 #5
Ok..
Jeg har en fil db.php:
<?
$db = mysql_connect("localhost", "*****", "*******");
mysql_select_db("thefreeworld", $db)
?>
Og så skal jeg bare have
<?
include "db.php";
?>
i toppen på hver side?

Så bare min mysql queries ned over siden?
Avatar billede jakobdo Ekspert
28. oktober 2004 - 13:20 #6
Ja!
Du smider dette i toppen af hver side:
<?php
include('db.php');

//Din kode kommer så her...
?>
Avatar billede freesoft Praktikant
28. oktober 2004 - 13:29 #7
Ok det gør ikke noget at jeg hopper ud og ind af PHP?

Jeg gør det fordi jeg får denne fejl:
"User 'thefreeworld' has exceeded the 'max_connections' resource (current value: 400)"

Men jeg får også en anden fejl:
Warning: mysql_query(): Access denied for user: 'nobody@localhost' (Using password: NO)


Når jeg skal lave en query, der bare skal hente noget tekst, er det ikke bare sådan her?
$forespWebNavn = mysql_query("SELECT Indhold FROM tfw_titel where navn = 'WebNavn'");
while($WebNavn = mysql_fetch_array($forespWebNavn)){
  echo "$WebNavn[0]"; }

Eller kan det gøres simplere?
Avatar billede freesoft Praktikant
28. oktober 2004 - 13:30 #8
"User 'thefreeworld' has exceeded the 'max_connections' resource (current value: 400)"
Skulle forsvinde efter ca. 1 time.
Avatar billede jakobdo Ekspert
28. oktober 2004 - 13:31 #9
Altså følgende bør virke:

<?php
include('db.php');
?>
//Html kode...
<?
$q = mysql_query("SELECT * FROM tabel1");
?>
//Html kode...
<?
$q = mysql_query("SELECT * FROM tabel2");
?>
Avatar billede Slettet bruger
28. oktober 2004 - 13:32 #10
det er såmen bare fordi du ikke husker at lukke dine connections igen ;o)
mysql_close($db);
Avatar billede stois Nybegynder
28. oktober 2004 - 13:33 #11
Jeg bruger den her selv fabrikerede funktion, som jeg includer før jeg kobler til databasen...


/**
    * @return Void
    * @param String("open"/"close"/"change_db") $Action
    * @param String(Nordan/Nordfalk/Danec/DES) $Site
    * @desc Open a connection to the MySQL Database...
    */
    Function Conn($Action,$Site = "") {
        if($Site != ""){
            if($Site == "Nordan"){
                $DB = "nordan";
            }elseif($Site == "Nordfalk"){
                $DB = "nordan1";
            }elseif($Site == "Danec"){
                $DB = "nordan2";
            }elseif($Site == "DES"){
                $DB = "nordan3";
            }elseif($Site == "Hoejfyn"){
                $DB = "nordan4";
            }else{
            Err::Set("yes", 1, 2);
            Err::Show();
            }
            $_SESSION['Current_DB_Conn'] == $Site;
        }
        $link = mysql_connect('localhost', '******', '********');
        if($Action == "open") {
            if (!$link) {
                die('Could not connect: '.mysql_error());
            } else {
                mysql_select_db($DB);
            }
        }elseif($Action == "close"){
            mysql_close($link);                                               
        }elseif($Action == "change_db"){
          mysql_select_db($DB);
          $_SESSION['Current_DB_Conn'] == $Site;
        }
    }

På den her måde kan jeg koble op til mine fire - fem databaser sådan her.:

DB::Conn("open", "Danec"); / DB::Conn("open", "Nordan"); ....osv.

og HVIS jeg skulle have lyst til at lukke for database forbindelsen, så gør jeg det sådan her:

DB::Conn("close");

oh HVIS jeg vil skifter til en anden database midt i min programmering, bruger jeg den her.:

DB::Conn("change_db", "Danec"); .... også videre

::::::::::::::::::::::::::::::::::::::::

Når du har connected engang, kan du for den sags skyld køre et MySQL Query helt nede i bunden, hvis du ikke har disconnected før da.

Vær opmærksom min funktion er lavet til en database samling, med fire-fem styks databaser, så hvis du vil bruge den skal den nok tilpasses lidt... :-) Bare sige til hvis det er du vil have hjælpe...

Håber det hjælper..

MvH Anders "Stois" Olesen
Avatar billede stois Nybegynder
28. oktober 2004 - 13:35 #12
oups Err::Set og Err:Show Skal lige udskiftes med en fejlmeddelse, fordi det er noget jeg styre med andre funktioner i min funktionsfil, så de vil ikke virker.
Avatar billede stois Nybegynder
28. oktober 2004 - 13:37 #13
Gartzen>> Jeg er sikker på du har ret, men jeg har aldrig været ude for det før, men det nok fordi jeg aldrig har turde at stress teste noget af det skod programmering jeg laver *LOL*
Avatar billede stois Nybegynder
28. oktober 2004 - 13:39 #14
Freesoft>> Du kan sagtens gå ind og ud af PHP unden det påvirker din database forbindelse :-) ... Jeg har hvertfald ikke haft nogle problemer med det...
Avatar billede stois Nybegynder
28. oktober 2004 - 13:41 #15
Freesoft>> den her fejl:
Warning: mysql_query(): Access denied for user: 'nobody@localhost' (Using password: NO)
kommer fordi du ikke har connectet til database før du laver en query ;-)

Den har jeg lavet nok gange til at jeg kan genkende den, hvilket er ca. 5000 gange *ROFLMAO*
Avatar billede Slettet bruger
28. oktober 2004 - 13:43 #16
stois -> og der er jo netop ikke connectet, fordi han ikke kan få loc pga en limit ;) (a00)
Avatar billede stois Nybegynder
28. oktober 2004 - 13:43 #17
Det er efter min erfaring kun nødvendigt at connecte en enkelt gang, pr. PHP, nogle gange er det slet ikke nødvendigt at connecte... f.eks. når en php har connectet og en anden filen bliver inkluderet ind i den fil, som har en aktiv connection til DB.
Avatar billede stois Nybegynder
28. oktober 2004 - 13:44 #18
Gartzen>> Som sagt jeg er sikker på du har ret, du siger det jo fordi du har erfaring for det... så det stoler jeg bare på =)
Avatar billede freesoft Praktikant
28. oktober 2004 - 13:45 #19
Men det er jo det første jeg gør med include "db.php"
Avatar billede stois Nybegynder
28. oktober 2004 - 13:45 #20
Gartzen>> *BTW* hvad betyder (a00)?
Avatar billede stois Nybegynder
28. oktober 2004 - 13:46 #21
Freesoft>> Hmm... du har tabt mig, hved mener du?
Avatar billede jakobdo Ekspert
28. oktober 2004 - 13:50 #22
Ligger din hjemmeside tilfældigvis på frac.dk?
Avatar billede freesoft Praktikant
28. oktober 2004 - 13:56 #23
Ja :-)
Avatar billede jakobdo Ekspert
28. oktober 2004 - 13:57 #24
Jeg tror faktisk de pt har nogle problemer...
Avatar billede jakobdo Ekspert
28. oktober 2004 - 13:58 #25
Se f.eks. denne: http://thefreeworld.frac.dk/
Med mindre det er din side? :o)
Avatar billede freesoft Praktikant
28. oktober 2004 - 14:03 #26
Ja det er så..
Avatar billede jakobdo Ekspert
28. oktober 2004 - 14:04 #27
HEHE! Sejt...
Jeg fandt den på google, hvor jeg søgte på: "current value: 400"
Det kunne have givet gode hits! :o)
Avatar billede freesoft Praktikant
28. oktober 2004 - 14:04 #28
Nu ved jeg ikke hvor mange gange phpBB connecter til databasen, men mit forum på freesoft.frac.dk er der ingen problemer med.
Avatar billede freesoft Praktikant
28. oktober 2004 - 14:07 #29
Hehe..ja mine reklamer fra Google har også vist reklamer for MySQL...:-P
Avatar billede freesoft Praktikant
28. oktober 2004 - 15:17 #30
Det ser ud til at virke nu...
Så skal jeg bare lige have gjort det på alle mine andre sider..
Avatar billede Slettet bruger
28. oktober 2004 - 15:32 #31
a00 = 400 ;o)
Avatar billede freesoft Praktikant
28. oktober 2004 - 16:00 #32
Så nu har jeg gjort det ved alle mine sider..

Hvis I vil have nogen points skal I nok lige lægge et svar :-)
Avatar billede jakobdo Ekspert
28. oktober 2004 - 16:03 #33
Svar...
Avatar billede Slettet bruger
28. oktober 2004 - 16:06 #34
svar :)
Avatar billede Slettet bruger
28. oktober 2004 - 16:06 #35
nej åbenbart ikke ;o)
Det skal ske mindst 1 ud af 3 gange ikk?
Avatar billede Slettet bruger
28. oktober 2004 - 16:07 #36
aarrrhhhgg!!!
Avatar billede jakobdo Ekspert
28. oktober 2004 - 16:07 #37
Hvoran synes du selv det går? :o)
Avatar billede Slettet bruger
28. oktober 2004 - 16:10 #38
og man føler sig ikke engang dum når man gør det.. fordi alle gør det hele tiden ;o)
Det skulle næsten være sådan at man skulle vælge, også selvom det var en kommentar..
Så at der ikke er en af de to der er selected... hmm..
Avatar billede freesoft Praktikant
28. oktober 2004 - 16:12 #39
I får lige lidt alle sammem :-)
Avatar billede jakobdo Ekspert
28. oktober 2004 - 16:33 #40
Takker...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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