Meerdere mysql connecties
Op onze website gebruiken we altijd 1 mysql connectie. Wegens omstandigheden moeten we nu connectie maken met een 2de database.
Bij onze query's geven we nooit mee op welke database de query moet uitgevoerd worden. We doen gewoon: mysql_query(query); i.p.v mysql_query(query, connectie); Reden: vroeger wisten we dit niet, waardoor er geen aandacht is aan besteed.
Hierdoor komen we met het volgende probleem:
We hebben onze standaard connectie en openen nu een 2de connectie, halen de gewenste data op, en sluiten deze weer af. Daarna willen we verder werken met onze 1ste connectie, maar dat gaat niet meer.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?PHP
//voorafgaand onze PHPcode en query's, geen probleem:
$con = mysql_connect(host, user, pas);
mysql_select_db(database, $con);
mysql_query(query); //geen probleem
//start toegevoegde codeblok voor 2de connectie
//vervolgens de 2de connectie:
$con2 = mysql_connect(host, user, pas);
mysql_select_db(database, $con2);
mysql_query(queryl, $con2);
mysql_close($res2);
//einde toegevoegde codeblok voor 2de connectie
//nu terug verder met onze code (via connectie 1)
mysql_query(query); //foutmelding: Access denied for user 'nobody'@'localhost'
?>
//voorafgaand onze PHPcode en query's, geen probleem:
$con = mysql_connect(host, user, pas);
mysql_select_db(database, $con);
mysql_query(query); //geen probleem
//start toegevoegde codeblok voor 2de connectie
//vervolgens de 2de connectie:
$con2 = mysql_connect(host, user, pas);
mysql_select_db(database, $con2);
mysql_query(queryl, $con2);
mysql_close($res2);
//einde toegevoegde codeblok voor 2de connectie
//nu terug verder met onze code (via connectie 1)
mysql_query(query); //foutmelding: Access denied for user 'nobody'@'localhost'
?>
Op php.net las ik dat mysql_query steeds gebruik maakt van de laatst actieve connectie. Maar wanneer we $con2 afsluiten, springt hij niet terug naar onze voorgaande (eerste) connectie. Na veel zoeken ben ik er nog steeds niet uit, maar blijkbaar is dit niet mogelijk.
Nu mijn vraag: kan ik dit toch mogelijk maken door een soort van include, class, ... waardoor hij mijn toegevoegde "codeblok" los uitvoerd van de rest? Ik heb reeds geprobeerd door dit toegevoegde codeblok in een functie, class, ... te plaatsen (met de hoop dat hij de 2de mysql_connection totaal los van de andere code bekijkt), maar steeds weer gaat hij bij de achterkomende mysql_query(query); in de fout. Hopelijk kent iemand een geschikte oplossing...
Intussen beschikken we over duizenden regels code waarin mysql_query(query); wordt gebruikt, het spreekt voor zich dat we dit niet allemaal zomaar even omvormen in mysql_query(query, con);
Gewijzigd op 01/01/1970 01:00:00 door Jaj BE
Uiteraard is dit maar een pleister voor het eigenlijke probleem. Zodra je meerdere verbindingen opzet, zul je voor elke query moeten specificeren welke verbinding gebruikt moet worden.
ps.
Het heeft weinig zin om een resultaatset te sluiten, $res2 moet natuurlijk wel $con2 zijn...
toe te voegen na het codeblok van con2. Het uitvoeren van deze gaat goed, maar daarna komt opnieuw de gewone mysql_query(query), welke weer fout gaat.
mysql_close($res2); was inderdaad bedoeld als mysql_close($con2);
Ik heb het even uitgetest om een mysql_close($res2); was inderdaad bedoeld als mysql_close($con2);
Als je echt afziet van het wijzigen van je code, zou je nog kunnen proberen om de data uit de tweede database aan het begin van je script op te halen en dan pas de verbinding naar de eerste database op te zetten...
mysql_select_db(database, $con);
(Eventueel zelfs ook eerst even sluiten).
Dat werkt SanThe, hopelijk geeft dit niet te veel bijkomende vertraging voor PHP
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$con = mysql_connect("localhost","root","");
$con2 = mysql_connect("sql_server","Test","pass");
mysql_query($sql,$con);
mysql_query($sql2,$con2);
?>
$con = mysql_connect("localhost","root","");
$con2 = mysql_connect("sql_server","Test","pass");
mysql_query($sql,$con);
mysql_query($sql2,$con2);
?>
Maar dat is mijn idee.
Cornel, dat kan zeker. Maar zoals TS aangeeft moet hij veel code aanpassen om het op die manier te doen.