2009-08-14 10 views
0

für ein Projekt Ich muss eine Mysql-Verbindung zu öffnen, schließen Sie es und lassen Sie alte Legacy-Code danach ausgeführt werden. Der Legacy-Code hat eine eigene Verbindung und ruft einfach mysql_query ($ sql) ohne den resource-Parameter auf.Umgang mit zwei MySQL-Verbindung in PHP

Wie kann ich damit umgehen? Kann ich eine Mysql-Verbindung als globale Verbindung festlegen? Muss ich die mysql_connect() -Anweisung erneut ausführen? Der Legacy-Code kann gerade nicht refaktoriert werden.

Hier eine kurze Demo

<?php 

function show() 
{ 
    $a = mysql_fetch_array(mysql_query('select database()')); 
    echo $a[0] . "<br>"; 
} 

$conn = mysql_connect('localhost', 'root', '', TRUE); 
mysql_select_db('dredd'); 
show(); 

mysql_connect('localhost', 'root', '', TRUE); 
mysql_select_db('afup'); 
show(); 
mysql_close(); 

$a = mysql_fetch_array(mysql_query('select database()', $conn)); 
echo $a[0] . "<br>"; 

show(); 

Die erste Auswahl ist in Ordnung, die zweite zwei, die dritte in Ordnung ist, weil es die Ressource, aber die vierte brach ("Zugriff verweigert für Benutzer‚ODBC‘@‘ localhost '(mit Passwort: NEIN) ").

Grüße, Cédric

Antwort

5

Wenn Sie angeben, die Verbindung nicht es das letzte erstellt man verwenden wird, so sollte es in Ordnung sein, wenn Sie die andere Verbindung zu schließen zuerst, z.B.

//open your db connection 
$conn1 = mysql_connect(); 
mysql_query($sql, $conn1); 
mysql_close($conn1); 

//open legacy code's db connection 
$conn = mysql_connect(); 
//run legacy code 

Wenn Sie Probleme haben, könnte es einfacher sein, PDO oder mysqli für die zweite Verbindung zu verwenden, da dann wissen Sie, sie sind auf jeden Fall trennen, ohne den Legacy-Code zu ändern.

+0

Meine DB-Verbindung ist für ein Fehler aufholen-System, so dass der Legacy-Code unterbrochen ist, mein Code ausgeführt wird, und der Legacy-Code fortgesetzt. Aber deine Idee ist sehr gut, danke! Ich versuche es so schnell wie möglich. –