mehrere DB-Verbindungen

Jörg

Grünschnabel
Hallo,

kann mir einer verraten, wie ich mehrere DB-Anbindungen realisieren kann? Das folgende Beispiel funktioniert leider nicht.

$link = mysql_pconnect($mysqlhost,$mysqluser,$mysqlpassword);
$link2 = mysql_pconnect($mysqlhost_z,$mysqluser_z,$mysqlpassword_z);

mysql_select_db("fnet_local",$link);
mysql_select_db("fnet",$link2);

$query = "select UserID From user_table where ForumID=1";
$result = mysql_query($query, $link);

while ($row=mysql_fetch_array($result)) {
print $row["UserID"];

}
 
Versuch es mal so:

PHP:
// db 1
$host = "server.de";
$user = "benutzername";
$password = passwort";
$database = "datenbankname";
$table = "tabelle";
// db2
$host2 = "server2.de";
$user2 = "benutzername2";
$password2 = passwort2";
$database2 = "datenbankname2";
$table2 = "tabelle2";

$db_connection = mysql_pconnect($host,$user,$password) or die("Datenbank nicht erreichbar !");
mysql_select_db($database,$db_connection);
// db abfrage
$query = mysql_query("SELECT * FROM $table");

$db_connection2 = mysql_pconnect($host2,$user2,$password2) or die("Datenbank nicht erreichbar !");
mysql_select_db($database2,$db_connection2);
// db abfrage
$query2 = mysql_query("SELECT * FROM $table2");

Ich würde aber eher mit connect arbeiten, pconnect muß man explizit beenden, sonst wird angenommen es folgt noch eine verbindung, auch wenn das script längst fertig ist. pconnect kann sich sehr negativ auf die performance der datenbank auswirken.

So müßte es aber laufen.
 
Zuletzt bearbeitet:
Ich würde aber eher mit connect arbeiten, pconnect muß man explizit beenden, sonst wird angenommen es folgt noch eine verbindung, auch wenn das script längst fertig ist. pconnect kann sich sehr negativ auf die performance der datenbank auswirken.

ich dachte immer andersrum ist es
pconnect ist schneller da schon eine verbindung steht
und bei connect immer eine neue verbindung aufgebaut wird ...

wie denn nu?
 
so habe ich das auch in Erinnerung.

Aber mal davon abgesehen: Ich kann natürlich immer wieder eine Verbindung auf und zu machen, immer abwechselnd. Aber eigentlich habe ich eine feste lokale Verbindung und möchte optional zusätzlich eine weitere Verbindung anfragen. Geht das denn überhaupt ?

Wenn ich das zweite mysql_select_db starte meldet php:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in test.php on line 23

zweifaches Connecten scheint allerdings nicht das Problem zusein.

Kann mir einer da helfen?
 
@Joerg

ueberpruefe mal ob deine variablen in dem query/db alle uebereinstimmen.

// offtopic

afaik, entlastet pconnect den server ein wenig.. das das staendige oeffnen und schliessen der db entfaellt.. hier mal ein interessanter link zum Thema: Persistente DB.

link
 
Zuletzt bearbeitet:
Ok, vielleicht habe ich mich nicht ganz verständlich ausgedrückt:

"pconnect" wird explizit beendet, wenn nichts mehr zu tun ist, sonst bleibt der mysql-server auf LAUSCHKURS und verbraucht so wertvolle Resourcen !!! Stellt Dir das zum Beispiel mit einem Forum vor, das die Verbindungen nicht schließt, schon hast Du an einem highpeak-day 100 leute gleichzeitig drauf, 100 pconnects die offen bleiben, weil die nicht geschlossen sind (mal als krasses Beispiel (man müßte natürlich auch das pconnect-limit auf 100 gesetzt haben)).

Wenn nix mehr folgt / für die db zu tun ist =>
SCHLIESSEN DER PCONNECT!
Was bedeutet wir müssen über die einstellung der "wait_timeout" in MySQL die Wartezeit auf ein Minimum einstellen, damit die Wartezeit nicht lang ist.

Wie gesagt.. lieber connect benutzen =)

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in test.php on line 23
Wie wäre es mit einem Beispiel? Quellcode? Solen wir mit dieser Standardfehlermeldung einen möglichen Fehler aus 2004895485458 Fehlern herausfinden? :-)

Eine Sache noch, ich habe angenommen Du möchest 2 Datenbankquellen aufrufen, also 2 server - ist das richtig?
Oder möchtest Du bloss 2 Abfragen auf der gleichen datenbank abrufen, dann wäre das Beispiel oben natürlich nicht richtig.

Greetz,
Neuro
 
Und die ganze Diskussion: "Das ist besser !", "nee, das is besser!" ist unnötig. Connect und PConnect erfüllen Aufgaben unterschiedlich und sind für unterschiedliche Aufgaben da. Pconnect kann RICHTIG angewendet Resourcen sparen.

Falsch angewendet schließt man bei starker Frequentierung einen möglichen Connect-Kanal zum server, da der ja auf eine weitere Verbindung wartet ( Database not available - Fehler treten auf ...)

Für normale und gewöhnliche Aufgaben, wie 2 Abfragen macht es keinen Sinn pconnect zu verwenden ... oder kommt es auf millisekunden an? LOL :-)
 
ok, dann sag mir bitte, welche Version besser geeignet ist, wenn man sehr sehr große Query-Menge zu verarbeiten hat.

Ich hab gelesen, dass pconnect bei apache keine sessionorientierte Verbindungen aufbaut, sondern mehrere Sessions über eine Verbindung jagt, solange die sich nicht überschneiden.
Ich habe nun viele User gleichzeitig auf der Seite, aber mit leicht versetzten Anfragen. Kann ich das über pconnect realisieren? Welche Detailskonfigurationen sind dafür nötig? Oder nehme ich conncet und close schnell wieder nach der Anfrage, um die Verbindungsanzahl gering zu halten.

Gruß

Jörg
 
@Jörg:
Das Problem ist vielleicht, dass manche MySQL-Server nur Verbindungen von bestimmten Hosts zulassen. So z.B. nur vom internen Providernetz oder auch nur von der selben Maschine, auf der das Script läuft (also localhost). Wenn du jetzt mit deiner Internet-IP
von deinem Rechner ankommst, blockt der nicht-lokale MySQL-Server deine Verbindung ab. Allerdings sollte dir das dann schon beim Aufruf von mysql_pconnect bekannt gegeben werden...
Eine andere Erklärung fällt mir jetzt auch nicht ein.

//offtopic
@Neurodeamon:
Gerade wenn es nur wenige Abfragen pro Skriptaufruf sind, macht die Verwendung von mysql_pconnect Sinn. Wenn man von 100 Aufrufen innerhalb einer Sekunde ausgeht, müsste mit mysql_connect 100 mal eine Connection geöffnet und geschlossen werden. Wenn man aber mysql_pconnect benutzt, würde sich diese Zahl drastisch reduzieren => geringere Belastung beim MySQL-Server => höhere Geschwindigkeit. Und du glaubst gar nicht, wie schnell sich bei stark belasteten Systemen diese Millisekunden hochrechnen...
Und dass das Warten auf weitere Anfragen auf einer bereits offenen Verbindung mehr Resourcen verbrät als das ständige Auf- u. Abbauen einer Verbindung, das musst du mir erst mal beweisen...

f'up2p
 
Zurück