Verbindung zu mehreren Datenbanken scheitert - Problem mit Ressource ID

LukaszRT

Grünschnabel
Hallo

Ich stehe hier auf dem Schlauch und habe leider keine Ahnung warum eine Verbindung zu mehreren Datenbanken nicht funktionieren will. Nun folgendes Problem liegt vor. Ich will meine Datenbanken replizieren. Habe nun so einen Master und einen Slave. Nun will ich mich mit beiden Datenbanken oder auch nur einer verbinden. Doch beides klappt nicht, sobald ich eine Datenbank auswählen (SELECT DB) will und die Ressource ID eingebe. MYSQL ERROR liefert keine Fehlermeldung zurück.

Nun folgender Code:

PHP:
global $_reg_comp, $dbmaster, $dbslave;
$_reg_comp['SQLLIB'] = 1.0;
$wbsecurety['sql_user'] = 'root';
$wbsecurety['sql_host'] = 'localhost';
$wbsecurety['sql_passwort'] = 'xxxxx';
$wbsecurety['sql_datenbank'] = 'db1';

$verbunden = 1;
$dbmaster = @mysql_connect($wbsecurety['sql_host'],$wbsecurety['sql_user'],$wbsecurety['sql_passwort'],true) || $verbunden = 0;
$dbslave = @mysql_connect('hostslave','userslave','slavepw',true) || $verbunden = 0;
@mysql_select_db($wbsecurety['sql_datenbank'],$dbmaster) || die('#'.$dbmaster.$dbslave.mysql_error());
unset($wbsecurety);

if ($verbunden == 0)
{
	@mysql_close($dbslave);
	@mysql_close($dbmaster);
	die('Keine Verbindung zur Datenbank!');
}

Ausgabe/Rückmeldung: #11

Im ersten Moment baue ich die Verbindung zu beiden Datenbanken auf was auch funktioniert. Egal ob ich den Parameter TRUE übergebe oder nicht. Habe hier beides probiert. Möchte ich mich aber in Master eine Datenbank auswählen springt er heraus und gibt #11 aus. Dahinter MASTER und SLAVE haben beide die selbe RESSOURCE ID. Lasse ich bei mysql_select_db den Parameter ID weg, dann würde er sich verbinden. Könnte aber dann keine DB auf SLAVE auswählen. Und genau hier stehe ich auf dem Schlauch. Warum haben beide die selbe ID? Warum liefert MYSQL keine Fehlermeldung?

LG ;)
 
Ich konnte das Problem in zwischen selber lösen. Da es aber sehr ärgerlich ist, wollte ich die Lösung hinterlassen. Das Problem liegt am OR Operator. Dieser liefert einfach TURE statt der Ressource id.

Konkretes Beispiel:

PHP:
$dbmaster = @mysql_connect($wbsecurety['sql_host'],$wbsecurety['sql_user'],$wbsecurety['sql_passwort'],true) || $verbunden = 0;

TRUE or FALSE


PHP:
$dbmaster = @mysql_connect($wbsecurety['sql_host'],$wbsecurety['sql_user'],$wbsecurety['sql_passwort'],true);

RESSOURCE ID

Hier ist das Problem dass die Abfrage der Variable nicht die Ressource ID sondern ein TRUE bze FALSE Wert für die Erfüllung der mysql_connect() anweiseung zugewiesen wird. Wäre die Bedienung nicht erfüllt würde FALSE geliefert werden. Möchte man die Ressource ID muss man auf die || Anweisung verzichten.

Irgend wie logisch, doch wenn man es nicht weis und dann versucht diese Variable als Ressource ID zu nutzen, dann kann man keine Datenbank slectieren. Ist im übrigen genau das selbe Problem bei jeder anderen Funktion. Das zurück gelieferte Ergebnis ist dann für die Tonne. Da PHP beim OR Operator definitiv TURE oder FALSE liefert.

Ich hoffe es hilft anderen die das selbe Problem oder ähnliches haben.
 

Neue Beiträge

Zurück