login  Naam:   Wachtwoord: 
Registreer je!
 Forum

meerder database connecties (Opgelost)

Offline Appie_Dijk - 13/03/2010 12:26
Avatar van Appie_DijkLid Hallo iedereen,

Ik wil met een script beginnen welke gegevens uit meerdere databases haalt, ik heb het volgende maar wil graag weten of dit correct is voordat ik verder ga...

connect.php
  1. <?
  2. $host = "localhost";
  3. $user = "...";
  4. $pass = "...";
  5. $db_systeem = "...";
  6. $db_relaties = "...";
  7.  
  8. $connectie1 = mysql_connect($host, $user, $pass);
  9. ?>


index.php
  1. <?
  2. require("connect.php");
  3.  
  4. mysql_select_db($db_relaties , $connectie1);
  5. $selectadressen1 = mysql_query("SELECT * FROM bedrijf_algemeen WHERE id='1'")or die(mysql_error());
  6. $adressen1 = mysql_fetch_object($selectadressen1);
  7. echo $adressen1->branche;
  8.  
  9. mysql_select_db($db_systeem , $connectie1);
  10. $selectadressen2 = mysql_query("SELECT * FROM bedrijf_types WHERE id='1'")or die(mysql_error());
  11. $adressen2 = mysql_fetch_object($selectadressen2);
  12. echo $adressen2->type;
  13. ?>


de gegevens worden netjes opgehaald, dus dat is het probleem niet...
maar is het ook correct om zo te scripten? ben namelijk gewend om alles uit 1 database te halen...

Groetjes Albert

14 antwoorden

Gesponsorde links
Offline nick5556 - 13/03/2010 12:31 (laatste wijziging 13/03/2010 12:31)
Avatar van nick5556 PHP beginner Bij meerdere gegevens kan je beter dit gebruiken:

  1. $res = mysql_query("hierjequery");
  2. while($object = mysql_fetch_row($res)) {
  3.  
  4. echo $object['0']; // dit laat dus de eerste rij zien, is de snelste manier.
  5. }


Ook is het verstandig om in je query's gebruik te maken van ``, dus op deze manier:

  1. SELECT `ID`, `Jouveld1` FROM `jetabel` WHERE `ID` = 'jou nummer'


Voor de rest is het een goede code, misschien nog meer gebruik maken van variabelen waarin je je query's zet.
Offline Martijn - 13/03/2010 12:33
Avatar van Martijn Crew PHP die backticks is nergens voor nodig. Alleen voor preserved woorden, maar daar ga je niet zo snel last van hebben
Offline nick5556 - 13/03/2010 12:35
Avatar van nick5556 PHP beginner Backticks maken je code overzichtelijker, dus makkelijker te bewerken. Ik vind het zelf in ieder geval handiger.
Offline Joost - 13/03/2010 12:36 (laatste wijziging 13/03/2010 12:46)
Avatar van Joost PHP expert Je kan het beter zo doen:
  1. $db1 = $db2 = mysql_connect($host, $user, $password);
  2. mysql_select_db($database1, $db1);
  3. mysql_select_db($database2, $db2);
  4. ////
  5. mysql_query($query, $db1); // voert uit op database 1
  6. mysql_query($query, $db2); // voert uit op database 2


Nick5556 schreef:
Backticks maken je code overzichtelijker, dus makkelijker te bewerken. Ik vind het zelf in ieder geval handiger.

Nee, lees maar: http://wiki.phpfreakz.nl/Backticks . Je kan beter de reserved names vermijden, zodat je helemaal geen backticks hoeft te gebruiken.
Offline Appie_Dijk - 13/03/2010 12:45
Avatar van Appie_Dijk Lid @nick5556: waarom zou je een while maken, dit is toch alleen nodig bij meerdere resultaten??

@nick5556 & @martijn: ik begrijp die "Backticks" en dat dit dus vooral nodig is voor gereserveerde woorden, maar welke woorden zijn dit dan?

@joost: waarom is het beter om het zo te doen? als het goed is komen er namelijk een stuk om 10 databases... mogelijk komen er later meerdere connecties naar andere servers maar dan kan ik toch beter dan een nieuwe $connectie aanmaken en deze aanpassen bijv. zo:

mysql_select_db($db_systeem , $connectie2);
Offline Joost - 13/03/2010 12:50
Avatar van Joost PHP expert
Appie_Dijk schreef:
@nick5556 & @martijn: ik begrijp die "Backticks" en dat dit dus vooral nodig is voor gereserveerde woorden, maar welke woorden zijn dit dan?
http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html . Maar je kan deze beter vermijden als kolom of tabelnaam.
Appie_Dijk[/quote schreef:
@joost: waarom is het beter om het zo te doen? als het goed is komen er namelijk een stuk om 10 databases... mogelijk komen er later meerdere connecties naar andere servers maar dan kan ik toch beter dan een nieuwe $connectie aanmaken en deze aanpassen bijv. zo:

mysql_select_db($db_systeem , $connectie2);
Ten eerste worden met mijn manier alle databases op hetzelfde punt in de code geselecteerd, wat overzichtelijker is. Daarnaast kan je nu makkelijker meerdere keren een query doen op een database, zonder telkens mysql_select_db erboven te moeten zetten.
Offline Appie_Dijk - 13/03/2010 12:58
Avatar van Appie_Dijk Lid nu gaat hij bij mij de fout in...

  1. $connectie1 = $connectie2 = mysql_connect($host, $user, $pass);
  2.  
  3. mysql_select_db($db_relaties , $connectie1);
  4. mysql_select_db($db_systeem , $connectie2);
  5. ///////
  6. $selectadressen1 = mysql_query("SELECT * FROM bedrijf_algemeen WHERE id='1'", $connectie1)or die(mysql_error());
  7. while($adressen1 = mysql_fetch_object($selectadressen1))
  8. {
  9. echo $adressen1->branche;
  10. }
  11.  
  12. $selectadressen2 = mysql_query("SELECT * FROM bedrijf_types WHERE id='1'", $connectie2)or die(mysql_error());
  13. $adressen2 = mysql_fetch_object($selectadressen2);
  14. echo $adressen2->type;

Offline Joost - 13/03/2010 13:01
Avatar van Joost PHP expert En dat werkt niet? Ik kan nu even niet testen, maar wat gebeurd er als je achter je mysql_connect en mysql_select_db ook mysql_error() zet?
Offline Appie_Dijk - 13/03/2010 13:05
Avatar van Appie_Dijk Lid Table 'attractive_systeem.bedrijf_algemeen' doesn't exist
Offline Joost - 13/03/2010 13:06
Avatar van Joost PHP expert Nou, dat spreekt voor zich, lijkt me?
Offline Appie_Dijk - 13/03/2010 13:34 (laatste wijziging 13/03/2010 13:35)
Avatar van Appie_Dijk Lid lijkt me ook ja, dat komt omdat hij deze moet pakken:

attractive_relaties.bedrijf_algemeen

en dat doet hij dus niet... omdat deze als laatste staat:
mysql_select_db($db_systeem , $connectie2);
Offline Joost - 13/03/2010 13:53 (laatste wijziging 13/03/2010 13:56)
Avatar van Joost PHP expert Ahja, je hebt gelijk. Ik heb er even mee gespeeld en een klasse ervoor geschreven. Voorbeeldje zit erbij:

Plaatscode: 138863

Het probleem lag bij de 4e parameter van mysql_connect, die moest op true:
php.net schreef:
If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned. The new_link parameter modifies this behavior and makes mysql_connect() always open a new link, even if mysql_connect() was called before with the same parameters. In SQL safe mode, this parameter is ignored.
Offline Appie_Dijk - 13/03/2010 14:22
Avatar van Appie_Dijk Lid maare dan kan ik toch beter mijn manier gebruiken? lijkt me nogal wat overzichtelijker als je later de code weer eens uit elkaar moet halen om fouten op te sporen...
Offline Joost - 13/03/2010 14:25 (laatste wijziging 13/03/2010 14:26)
Avatar van Joost PHP expert
Appie_Dijk schreef:
maare dan kan ik toch beter mijn manier gebruiken? lijkt me nogal wat overzichtelijker als je later de code weer eens uit elkaar moet halen om fouten op te sporen...
Dat kan ja, maar imo is het onhandig. Als jij dat fijner vind werken moet je het zeker doen.  
Bedankt door: Appie_Dijk
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.253s