/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hvorfor vil mysql_close ikke lukke ned ?
Fra : -Martin-


Dato : 12-04-02 23:30

Først åbner vi lige (som virker) :)

function openconn() {

   $db_database = "xxx"; // DATABASE NAVN
   $db_user = "xxx"; // Database bruger navn
   $db_pass = "xxx"; // Datbase password
   $db_host = "xxx"; // Database host

   $sqlconnection =
mysql_connect("$db_host","$db_user","$db_pass") OR DIE
(mysql_error());
   mysql_select_db("$db_database") OR DIE (mysql_error());
}

også lukker vi igen

function closeconn() {
   global $sqlconnection;
   mysql_close($sqlconnection);
}

Kalder således

openconn();
$sql = sql("SELECT COUNT(*) as tal FROM admin WHERE login =
'$seslogin' AND pass = '$md5_pass'");
closeconn();


Meeen får fejlen:

Warning: Supplied argument is not a valid MySQL-Link resource in
d:\wwwroot\camfilm\include\functions.inc.php on line 31


Som altså er closeconn() funktionen.

Og hvis jeg fjerner kaldet closeconn(); så får jeg ikke fejlen!

Nogen der kan forklare hvorfor ?

 
 
Regin Larsen (12-04-2002)
Kommentar
Fra : Regin Larsen


Dato : 12-04-02 23:39

-Martin- wrote:
> function openconn() {
>
>    $db_database = "xxx"; // DATABASE NAVN
>    $db_user = "xxx"; // Database bruger navn
>    $db_pass = "xxx"; // Datbase password
>    $db_host = "xxx"; // Database host
>
>    $sqlconnection =
> mysql_connect("$db_host","$db_user","$db_pass") OR DIE
> (mysql_error());
>    mysql_select_db("$db_database") OR DIE (mysql_error());
> }
> Nogen der kan forklare hvorfor ?

du skal også have en global $sqlconnection; i openconn()


--
mvh, Regin Larsen - http://opia.dk


-Martin- (12-04-2002)
Kommentar
Fra : -Martin-


Dato : 12-04-02 23:55

On Sat, 13 Apr 2002 00:38:44 +0200, Regin Larsen <newsspam@opia.dk>
wrote:

>-Martin- wrote:
>> function openconn() {
>>
>>    $db_database = "xxx"; // DATABASE NAVN
>>    $db_user = "xxx"; // Database bruger navn
>>    $db_pass = "xxx"; // Datbase password
>>    $db_host = "xxx"; // Database host
>>
>>    $sqlconnection =
>> mysql_connect("$db_host","$db_user","$db_pass") OR DIE
>> (mysql_error());
>>    mysql_select_db("$db_database") OR DIE (mysql_error());
>> }
>> Nogen der kan forklare hvorfor ?
>
>du skal også have en global $sqlconnection; i openconn()


Ahhhhh taaaaaak :))

Det virker nu altså :)

Dvs man skal have global i den funktion som laver variablen og i den
funktion som bruger variablen, har jeg ret i det ?

Tonni Aagesen (13-04-2002)
Kommentar
Fra : Tonni Aagesen


Dato : 13-04-02 01:17

"-Martin-" <admin@natten-i.dk> skrev i en meddelelse
news:gbpebu43s9k35pq8rud0uas8vicgi9qrou@4ax.com...

> Dvs man skal have global i den funktion som laver variablen og i den
> funktion som bruger variablen, har jeg ret i det ?

Ja, hvis du ikke decideret returnere variablen. Det er generelt ikke god
skik at bruge "global" i funktioner, hvis man kan undgå det. Overvej f.eks.
følgende

function openconn(db_host, db_user, db_pass) {

$sqlconnection =
mysql_connect("$db_host","$db_user","$db_pass") OR DIE
(mysql_error());
return $sqlconnection;

}

så kalder du bare funktionen:

$link = openconn("localhost", "martin", "hemlig"); [1]
mysql_select_db("din_DB");
$result = mysql_query("SELECT * FROM foo", $link);
......
mysql_close($link);

[1] Når du kalder funktion op sender du såkaldte parametre med (localhost
osv.) Se i øvrigt http://dk.php.net/manual/en/functions.php

I øvrigt er det lidt fjollet at skrive en funktion til at lukke for
forbindelsen (mysql_close), når det ikke er mere kompliceret... Med mindre
du selvfølgelig vil lave dine scripts nemmere at bruge på andre databaser


Håber det gav dig noget input


--
Mvh
Tonni Aagesen
agent29@mail1.stofanet.dk



-Martin- (13-04-2002)
Kommentar
Fra : -Martin-


Dato : 13-04-02 04:55

On Sat, 13 Apr 2002 02:16:47 +0200, "Tonni Aagesen"
<use.my@signature.com> wrote:

>"-Martin-" <admin@natten-i.dk> skrev i en meddelelse
>news:gbpebu43s9k35pq8rud0uas8vicgi9qrou@4ax.com...
>
>> Dvs man skal have global i den funktion som laver variablen og i den
>> funktion som bruger variablen, har jeg ret i det ?
>
>Ja, hvis du ikke decideret returnere variablen. Det er generelt ikke god
>skik at bruge "global" i funktioner, hvis man kan undgå det. Overvej f.eks.
>følgende

Hvorfor er det ikke en god skik ?
Er der problemer med det?
Eller det bare "din" mening om det ?

>
>function openconn(db_host, db_user, db_pass) {
>
>$sqlconnection =
>mysql_connect("$db_host","$db_user","$db_pass") OR DIE
>(mysql_error());
>return $sqlconnection;
>
>}
>
>så kalder du bare funktionen:
>
>$link = openconn("localhost", "martin", "hemlig"); [1]
>mysql_select_db("din_DB");
>$result = mysql_query("SELECT * FROM foo", $link);

Det var lige præcis dette jeg ville undgå.

Så jeg tror bare jeg bruger global

>.....
>mysql_close($link);
>
>[1] Når du kalder funktion op sender du såkaldte parametre med (localhost
>osv.) Se i øvrigt http://dk.php.net/manual/en/functions.php
>
>I øvrigt er det lidt fjollet at skrive en funktion til at lukke for
>forbindelsen (mysql_close), når det ikke er mere kompliceret... Med mindre
>du selvfølgelig vil lave dine scripts nemmere at bruge på andre databaser
>

Det var nemlig derfor :) sidder og roder med en postgresql og mysql
løsning :)

>
> Håber det gav dig noget input


Dann Søjberg (13-04-2002)
Kommentar
Fra : Dann Søjberg


Dato : 13-04-02 12:41

"-Martin-" <admin@natten-i.dk> wrote in message
news:nsafbuknmqldqhlpoiv5oa8ijlruu22ntc@4ax.com...
> >Ja, hvis du ikke decideret returnere variablen. Det er generelt ikke god
> >skik at bruge "global" i funktioner, hvis man kan undgå det. Overvej
f.eks.
> >følgende
>
> Hvorfor er det ikke en god skik ?
> Er der problemer med det?
> Eller det bare "din" mening om det ?

Problemet med globale variable er at du får svært ved at navngive dine
variable når du får bare lidt flere. Globale variable er fy-fy, da de
risikerer at overskrive hinanden. Måske du mener at du sagtens kan hitte
rede på dine variable, men jeg har da været ude for at det tror andre også
og så virker skidtet pludselig ikke

[CUT returnering af variabel fra funtion]
> Det var lige præcis dette jeg ville undgå.
> Så jeg tror bare jeg bruger global

Hvorfor ville du undgå dette. Det er efter min overbevisning den pæneste
måde at gøre det på. På den måde kan du evt. udvide din openconn() så den
kan bruges til at åbne connections til flere databaser. Forestil dig at du
har to databaser du skal hente data fra. Så skal du til at lave flere
globale variable og du skal rette i din openconn() for at tilføje endnu en
global variabel. Det er ikke pænt og slet ikke hvis man tænker
objektorienteret programmering.

--
Med venlig hilsen
Dann Søjberg




Per Thomsen (15-04-2002)
Kommentar
Fra : Per Thomsen


Dato : 15-04-02 17:12


"-Martin-" <admin@natten-i.dk> skrev i en meddelelse
news:nsafbuknmqldqhlpoiv5oa8ijlruu22ntc@4ax.com...
> On Sat, 13 Apr 2002 02:16:47 +0200, "Tonni Aagesen"
> <use.my@signature.com> wrote:
>
> >"-Martin-" <admin@natten-i.dk> skrev i en meddelelse
> >news:gbpebu43s9k35pq8rud0uas8vicgi9qrou@4ax.com...
[snip]
> >Ja, hvis du ikke decideret returnere variablen. Det er generelt ikke god
> >skik at bruge "global" i funktioner, hvis man kan undgå det. Overvej
f.eks.
> >følgende
>
> Hvorfor er det ikke en god skik ?
> Er der problemer med det?
> Eller det bare "din" mening om det ?
>
Nu var det jo godt nok ikke mig der sagde det, men jeg er enig, og ville
gerne lige supplere med en kommentar om hvorfor man ikke skal bruge global
variable.

Dit program blivere tættere koblet af det. Ideen i en funktion er simpel
nok, giv den noget input, og forvent noget output.
Ideen er ikke: Gi'den noget input og forvent noget output - hvis i øvrigt at
du har husket at gøre alt muligt andet, før du kalder funktionen. ;)

Det er ønskværdigt at dine funktioner kan copy-pastes (eller måske bare
inkluderes) til brug i andre programmer, og det kan de ikke hvis du anvender
global variable.

Jeg tror du forsøget at løse 2 problemer:
1) Du ønsker at være istand til nemt at skifte database.
2) Du ønsker kun at skulle ændre "forbindelsels-oplysningerne" et sted.

Det kan du også sagten opnå.

I den fil hvor du har dine database-funktioner (eller i en anden fil) laver
du nogle global variable til forbindelses-oplysningerne:
<?
$GLOB_DB_HOST = 'localhost';
$GLOB_DB_USER = 'someuser';
$GLOB_DB_PASSWD = 'someuserspasswd';
$GLOB_DB_DATABASE = 'somedatabase';
?>

Og disse globale variable, giver du så med som parametre til openconn().
<?
require_once('db.inc.php');
$dbConn = openconn($GLOB_DB_HOST, $GLOB_DB_USER, $GLOB_DB_PASSWD);
selectdb( $GLOB_DB_DATABASE );
....
...
closeconn($dbConn);
?>

Hvor openconn(), selectdb(), og closeconn() - selvfølgelig er funktioner i
din database abstraktion.

Nu kan du med lethed genbruge funktionerne (de stiller ingen krav om globale
variable) - og du har kun et sted at ændre
forbindelses-oplysningerne.


[snip]
MVH Per Thomsen,
http://www.pert.dk/



-Martin- (15-04-2002)
Kommentar
Fra : -Martin-


Dato : 15-04-02 22:59

[SNIP]
><?
> $GLOB_DB_HOST = 'localhost';
> $GLOB_DB_USER = 'someuser';
> $GLOB_DB_PASSWD = 'someuserspasswd';
> $GLOB_DB_DATABASE = 'somedatabase';
>?>
>
>Og disse globale variable, giver du så med som parametre til openconn().
><?
> require_once('db.inc.php');
> $dbConn = openconn($GLOB_DB_HOST, $GLOB_DB_USER, $GLOB_DB_PASSWD);
> selectdb( $GLOB_DB_DATABASE );
> ....
> ...
> closeconn($dbConn);

Ja også ska vi lige have integret 2+ database typer :)

Jeg mener godt man kan bruge global nå det fx er til database
forbindelser, altså som ovenstående.

Og nej jeg mener ikk man kan bruge global 1000mio steder. Og det gør
jeg da heller ikke.

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste