4.5.2: Login-Funktionalität
ich hab mich noch etwas mit dem problem beschäftig und hab folgendes gefunden:
http://www.phpbuilder.com/columns/peter20001107.php3
http://www.phpbuilder.com/columns/peter20001107.php3
*** make your own tools (wishlist :: thx)
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.
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:
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...
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;
}
}
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();
?>
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...
*** make your own tools (wishlist :: thx)
Hallo emergence!
eingefügt - aber die Datenbankverbindung wurde nicht wie gewünscht "zurückgebogen", daß also wieder genau derselbe Fehler aufgetreten ist.
Danke... ich habe also am Ende des Moduls einemergence 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...
Code: Alles auswählen
$db = new DB_Contenido();
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:
ich hab jetzt noch folgendes ausprobiert
in conlib/local.php hab ich einfach folgendes ergänzt.
damit kann ich zb eine neue $dbx variable definieren die auf einen anderen host zeigt...Code: Alles auswählen
class DB_External extends DB_Sql { ... }
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:
soweit so gut...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(); ?>
Das erscheint logisch... was meint jetzt timo zu dieser Ergänzung? Vielleicht gibt's ja einen "offiziellen" Lösungsansatz der Entwickler?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...
Michael Wohlers