Een probleem waar ik niet uit geraak.
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.

<?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'
?>

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);
En als je nu enkel bij de eerst volgende query de connectie meegeeft aan mysql_query()? Op dat moment is dat weer de laatst actieve verbinding dus zal die voor in de rest van je scripts weer gebruikt worden.

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.
<?php
mysql_close($res2);
?>
Het heeft weinig zin om een resultaatset te sluiten, $res2 moet natuurlijk wel $con2 zijn...
Ik heb het even uitgetest om een <?PHP mysql_query(query, $con); ?> 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);
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...
En als je nu na het sluiten van de tweede connectie opnieuw de eerste opent ?
mysql_select_db(database, $con);

(Eventueel zelfs ook eerst even sluiten).
Dat werkt SanThe, hopelijk geeft dit niet te veel bijkomende vertraging voor PHP
Het kan toch ook zo?

<?php
$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.

Reageren