mehrere MySQL-Verbindungen gleichzeitig

casb

Grünschnabel
Hy Junx,

hab leider nix passendes gefunden, deswegen poste ich mal meine Frage:

Ich würde gerne zwei MySQL-Verbindungen zu verschiedenen Servern gleichzeitig nutzen (aus Sicherheitsgründen). Leider tritt aber das Problem auf, dass das Script anscheinend nur eine Verwalten kann. Weiß nicht, wieso. Vlt. kann mir einer sagen, wo mein Fehler ist bzw. ob es überhaupt geht.

Script zur Erläuterung:

PHP:
class sql
{
	private $con_data1 = array(
						"ip"	=> "127.0.0.1" ,
						"user"	=> "root" ,
						"pw"	=> "pw" ,
						"db"	=> "db_on_sql_one"
						);
	private $con_data2 = array(
						"ip"	=> "127.0.0.2" ,
						"user"	=> "root" ,
						"pw"	=> "pw" ,
						"db"	=> "db_on_sql_two"
						);
	
	private $connection_one;
	private $connection_two;
	
	function __construct()
	{
		$this->connect( $this->connection_one , $this->con_data1 );
		$this->connect( $this->connection_two , $this->con_data2 );
	}
	
	private function connect( &$link_Nr , &$data )
	{
		$link_Nr = mysql_connect( $data["ip"] , $data["user"] , $data["pw"] );
		mysql_select_db( $data["db"] , $link_Nr );
	}
	
	function querySQL( $query , $selectSQL )
	{
		if( $selectSQL == "Main_Server" )
			return mysql_query( $query , $this->connection_one );
		else
			return mysql_query( $query , $this->connection_two );
	}
}

#### Testpart:

$testSQL = new sql;
$r = $testSQL->querySQL( "SELECT * FROM table_on_sql_two" , "Sec_Server" );
while( $p = mysql_fetch_assoc( $r ) )
	echo count( $p );
$r = $testSQL->querySQL( "SELECT * FROM table_on_sql_one" , "Main_Server" );
while( $p = mysql_fetch_assoc( $r ) )
	echo count( $p );
$r = $testSQL->querySQL( "SELECT * FROM table_on_sql_two" , "Sec_Server" );
while( $p = mysql_fetch_assoc( $r ) )
	echo count( $p );
$r = $testSQL->querySQL( "SELECT * FROM table_on_sql_one" , "Main_Server" );
while( $p = mysql_fetch_assoc( $r ) )
	echo count( $p );

Problem: jenachdem, welche SQL-Verbindung zuletzt geöffnet wurde, wird jede Anfrage (egal, welcher SQL-Link-Identifier ausgewählt ist) an diese zuletzt geöffnete gesendet.

[Bitte nicht nach dem Sinn dieses Codestückes fragen, das habe ich nur zur Erläuterung getippt, denn der original-Quellcode ist zu eingebettet ins System um diesen einfach raus zu kopieren.]

Thx casb

[Edit:] Das Problem ist unabhängig davon, ob ich connect oder pconnect nutze [/Edit]
 
Zuletzt bearbeitet:
Mehrere Datenbankverbindungen sind durchaus möglich. Allerdings muss bei jeder Interaktion die zu verwendende Datenbankverbindung angegeben werden. In deinem Fall hast du es anscheinend richtig gelöst.
 
Dass der zweite Parameter der mysql_query-Fkt. die SQL-ident-Nr ist, ist mir klar. Sollte nach der Api auch funktionieren, aber das tut es leider nicht und genau das ist der Grund, warum ich hier poste.

In meinen SQL-Server-Einstellungen habe ich auch keine Restriktion gefunden (max_connection bzw. max_user_connection ist nicht zu niedrig).

Deswegen frage ich ja, ob wer vlt. noch eine Idee hat, woran es liegen könnte.

(Es geht zwar, dass ich die jeweilig genutzte Verbindung neu aufbaue (per pconnect), aber das ist nicht Sinn der Sache und bewirkt nur redundanten Datenaustausch.

Gruß casb
 
Inwiefern aufwandreich? Identifikationsdaten müssen so oder so übermittelt werden.

Aber bezüglich des Problems ist diese Eigenschaft unabhängig, denn wie gesagt ist es unabhängig davon, ob eine persistente oder nicht-persistente Verbindung besteht.

Um deine Frage zu beantworten, die eine SQL befindet sich auf dem Server, auf welchem das Script läuft, insofern ist der Aufwand maginal. Die zweite SQL kann man nicht bestimmen, da diese sowohl auf dem Server, als auch auf einem Fremdserver liegen kann, das kommt auf den Kunden an, wie er es erwünscht.

Gruß casb
 
Zurück