Seite 2 von 2

Verfasst: Mi 10. Nov 2004, 18:56
von timo
kann ich dir leider nicht sagen...dazu müßte ich debuggen...da ich aber im Moment krankgeschrieben bin kann ich leider nicht viel nachsehen...

Verfasst: Do 11. Nov 2004, 08:43
von emergence
na dann gute besserung...

Verfasst: Fr 12. Nov 2004, 09:41
von m.wohlers
Hallo timo!
timo hat geschrieben:kann ich dir leider nicht sagen...dazu müßte ich debuggen...da ich aber im Moment krankgeschrieben bin kann ich leider nicht viel nachsehen...
Danke für die Bemühungen... dann wünsche ich erstmal gute Besserung und hoffe auf baldige Genesung!

Verfasst: Fr 12. Nov 2004, 14:36
von emergence
ich hab mich noch etwas mit dem problem beschäftig und hab folgendes gefunden:
http://www.phpbuilder.com/columns/peter20001107.php3

Verfasst: Fr 12. Nov 2004, 16:56
von emergence
okay ich muss da jetzt ein wenig ausholen...

ich hab jetzt ein wenig mit externen dbs herumgespielt und bin eigentlich nicht wirklich auf ein problem gestossen...

folgendes ist mir aufgefallen

ich definiere eine contenido verbindung
$db = new DB_Contenido();

anschließend frag ich etwas auf ner anderen db ab so wie du das gemacht hast...

zeigt die $db auf deine neue verbindung !

eine definition von
$dummy = new DB_Contenido();
anschließend, biegt das in der $db nicht wieder gerade... (ist auch logisch)

ein zurücksetzen muss funktionieren wenn du nach deinem code teil
nochmals
$db = new DB_Contenido();
aufrufst...

dann zeigt die $db(nur diese) wieder auf die contenido db...
alle anderen vorher initialisierten zeigen dennoch auf die falsche, solange sie nicht neu initialisiert werden...

viel einfacher kann ich es momentan nicht beschreiben...

ich hab jetzt noch folgendes ausprobiert
in conlib/local.php hab ich einfach folgendes ergänzt.

Code: Alles auswählen

class DB_External extends DB_Sql {

  var $Host;
  var $Database;
  var $User;
  var $Password;

  var $Halt_On_Error = "report";

  //Constructor
  function DB_External($Host, $Database, $User, $Password)
  {

      $this -> Host = $Host;
      $this -> Database = $Database;
      $this -> User = $User;
      $this -> Password = $Password;

  }

  function haltmsg($msg) {
    error_log($msg);
  }

  function copyResultToArray ()
  {
  		$values = array();

  		$metadata = $this->metadata();

		if (!is_array($metadata))
		{
			return false;
		}

		foreach ($metadata as $entry)
		{
			$values[$entry['name']] = $this->f($entry['name']);
		}

		return $values;
  }
}
damit kann ich zb eine neue $dbx variable definieren die auf einen anderen host zeigt...
zb:

$dbext = new DB_External("localhost", "xmb", "root", "");

die verbindung auf den neuen server und/oder db beeinträchtigt somit keinerlei bestehende verbindung

mein kleines testscript zum testen sah dann einfach so aus:

Code: Alles auswählen

<?php

$sql = "SHOW TABLES";

$db = new DB_Contenido;
$dbext = new DB_External("localhost", "xmb", "root", "");

$dbext->query($sql);
echo "x".$dbext->nf();

$db->query($sql);
echo "y".$db->nf();

?>
soweit so gut...

kommen wir zu dem punkt warum das eigentlich auftritt:
die klasse DB_Contenido beruht ja auf phplib
sobald einmal eine verbindung zu einem db server hergestellt wurde
wird die Link_ID innerhalb dieser klasse gespeichert(um nicht jedesmal wieder einen connect auf die db zu machen).

wird nun mittels
mysql_select_db (OSC_DB_DATABASE, $osc_connection);
auf ne andere db gewechselt, kann das die klasse nicht wissen !
mysql zeigt dann immer auf die zuletzt selektierte...

innerhalb der klassen funktioniert das aber ganz wunderbar...
das heisst -> mysql_db_select in der $dbext wirkt sich nicht auf die in der $db selektierten aus...

Verfasst: So 14. Nov 2004, 12:01
von m.wohlers
Hallo emergence!
emergence hat geschrieben:okay ich muss da jetzt ein wenig ausholen...

ich hab jetzt ein wenig mit externen dbs herumgespielt und bin eigentlich nicht wirklich auf ein problem gestossen...

folgendes ist mir aufgefallen

ich definiere eine contenido verbindung
$db = new DB_Contenido();

anschließend frag ich etwas auf ner anderen db ab so wie du das gemacht hast...

zeigt die $db auf deine neue verbindung !

eine definition von
$dummy = new DB_Contenido();
anschließend, biegt das in der $db nicht wieder gerade... (ist auch logisch)

ein zurücksetzen muss funktionieren wenn du nach deinem code teil
nochmals
$db = new DB_Contenido();
aufrufst...

dann zeigt die $db(nur diese) wieder auf die contenido db...
alle anderen vorher initialisierten zeigen dennoch auf die falsche, solange sie nicht neu initialisiert werden...

viel einfacher kann ich es momentan nicht beschreiben...
Danke... ich habe also am Ende des Moduls ein

Code: Alles auswählen

$db = new DB_Contenido();
eingefügt - aber die Datenbankverbindung wurde nicht wie gewünscht "zurückgebogen", daß also wieder genau derselbe Fehler aufgetreten ist.
emergence hat geschrieben:
ich hab jetzt noch folgendes ausprobiert
in conlib/local.php hab ich einfach folgendes ergänzt.

Code: Alles auswählen

class DB_External extends DB_Sql {

...
 
}
damit kann ich zb eine neue $dbx variable definieren die auf einen anderen host zeigt...
zb:

$dbext = new DB_External("localhost", "xmb", "root", "");

die verbindung auf den neuen server und/oder db beeinträchtigt somit keinerlei bestehende verbindung

mein kleines testscript zum testen sah dann einfach so aus:

Code: Alles auswählen

<?php

$sql = "SHOW TABLES";

$db = new DB_Contenido;
$dbext = new DB_External("localhost", "xmb", "root", "");

$dbext->query($sql);
echo "x".$dbext->nf();

$db->query($sql);
echo "y".$db->nf();

?>
soweit so gut...
Okay, das hört sich vernünftig an... dann muß ich jetzt schauen, wie ich das Modul umbaue, um diese Klasse zu nutzen... die Bedienung ist ja ein wenig anders als direkt mit mysql_...()-Methoden...
emergence hat geschrieben: kommen wir zu dem punkt warum das eigentlich auftritt:
die klasse DB_Contenido beruht ja auf phplib
sobald einmal eine verbindung zu einem db server hergestellt wurde
wird die Link_ID innerhalb dieser klasse gespeichert(um nicht jedesmal wieder einen connect auf die db zu machen).

wird nun mittels
mysql_select_db (OSC_DB_DATABASE, $osc_connection);
auf ne andere db gewechselt, kann das die klasse nicht wissen !
mysql zeigt dann immer auf die zuletzt selektierte...

innerhalb der klassen funktioniert das aber ganz wunderbar...
das heisst -> mysql_db_select in der $dbext wirkt sich nicht auf die in der $db selektierten aus...
Das erscheint logisch... was meint jetzt timo zu dieser Ergänzung? Vielleicht gibt's ja einen "offiziellen" Lösungsansatz der Entwickler?

Verfasst: So 14. Nov 2004, 18:30
von timo
nein, von unserer Seite gibts da keinen Lösungsansatz - zumindest wüsste ich keinen...