[PHP/MySQL] Hoe zit de connectie?

Pagina: 1
Acties:

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 08-09 17:10
Ik maak nu op zo'n manier een connectie met de MySQL-server en selecteer de database:
$link = @mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_select_db ($dbname);
Normaliter ga ik dan verder met het script die een aantal query's uitvoerd dmv $result = mysql_query ("select bier from tap");

Alleen ben ik nu eindelijk eens bezig gegaan met classes, en vraag me erg af of de class, die in een apart bestand zit, ook gebruik kan maken van de connectie, zonder iets te globalizen of de $link door te sturen? Zo ja, hoe weet ie dan welke database er geselecteerd is? Zit dat ook opgeslagen in $link?

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 08-09 17:10
Niet alleen met classes zit ik me nu te bedenken.. Ik heb een functie gedefinieerd die gebruik maakt van een mysql-connectie. De functie opent nu zelf de db-link, maar de truc moet dus worden dat de functie aangeroepen vanuit een bestand dat zelf eerst een connectie maakt:
code:
1
2
3
4
5
6
7
8
9
10
11
index.php
*   Maak connectie aan met db
*   Include update.php
*   roep functie aan uit update.php
  update.php functie
  *   gebruik connectie uit index.php
*   include general.php
*   maak nieuw object van een class uit general.php
  general.php class
  *   gebruik connectie uit index.php
* doe nog wat zooi

Vraag is dus: hoe gebruik ik de link die in de index.php gemaakt is in de 2 andere bestanden update.php en general.php? Moet ik die meesturen aan de functie en het maken van de class?

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:28

JSchut

.....

misschien lees ik het wel verkeerd of begrijp ik je niet helemaal

maar als je een verbinding maakt in index.php dan kan je deze toch ook gebruiken in de files die je include :?

PSN jschut_82 | Xbox: JSchut82


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 08-09 17:10
Dat is dus inderdaad de vraag: kan dat? Zo ja: hoe zit dat dan eventueel met verschillende verbindingen eo verschillende databases?

Ik hoef de link-identifier niet door te geven aan de functies en classes (objects daarvan) van de files die ik include?

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:28

JSchut

.....

classes heb ik nog niet echt veel mee gedaan of eigenlijk niks

maar met een function moet je $link wel global maken

edit:
of meegeven

PSN jschut_82 | Xbox: JSchut82


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

De link identifier die je van mysql_connect terug krijgt is in principe gewoon een variabele met dezelfde scope regels als alle andere variabelen.

Verder is dit misschien nuttig:
De PHP Manual schrijft op http://nl.php.net/manual/nl/function.mysql-query.php
Als link_identifier niet wordt gegeven, wordt de laatst geopende link aangenomen. Als er geen link open is, probeert de functie een link te maken alsof mysql_connect() wordt aangeroepen zonder argumenten, en die te gebruiken.

Rustacean


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 08-09 17:10
Ghe, handig :) Dus mysql_select_db doet ook de db selecten van de laatst geopende link, in dit geval $link.. En dus is het in deze context "netter" $link mee te geven aan de functie en de classes.. Thanx! :)

Verwijderd

IDD.
Wanneer je de link identifier niet opgeeft neemt mysql de laatst geopende voor zijn rekening. Een GROOT nadeel hierbij is dat je niet meer op een VEILIGE manier kan gebruik maken van mysql_insert_id -> deze functie geeft je de laatst gecreëerde (auto increment) id terug. Dit heb je nodig als je gerelateerde records wilt inserten (1 record waarbij er een foreign key is die wijst naar een andere recorde - diegene die je bijv. net hebt ge-insert). Deze last_insert_id is uniek per connectie object. Indien je 1 maal ergens in 1 van je scripts een mysql insert uitvoert ZONDER link identifier, kan je NERGENS meer zeker zijn dat last_insert_id wel de correcte id teruggeeft!!!!!!!!!

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 08-09 17:10
Oke, dan stuur ik $link door naar me class en naar de functie.. Die ontvangen hem:
PHP:
1
<?class Tgeneral {  function Tgeneral ($link) {    $result = mysl_query ("SELECT bier FROM tab");  }}?>

Maar nu vraag ik me af: HOEZO heb ik die link meegestuurd? In de contruxtar doe ik er toch nix mee.. Alleen het meegestuurdheid, maar heb je daar daadwerkelijk wat aan?

Hmm.. ff php.net kijken.. www.php.net/mysql_query
resource mysql_query ( string query [, resource link_identifier [, int result_mode]])
Ghe vandaar :)
PHP:
1
<?class Tgeneral {  function Tgeneral ($link) {    $result = mysl_query ("SELECT bier FROM tab", $link);  }}?>

Ah, me eigen vraag alweer beantwoord :D Maar misschien handig voor een volgende. jeuj!
Pagina: 1