PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem: Mehrere Datenbanken über Klasse


patrique
22.08.2002, 13:45:59
Hi!

Ich habe es mir einfach gemacht und eine mySQL-Klasse aufgebaut, über die ich bisher alle DB-Funktionen laufen ließ. Leider ist eine neue Anforderung, daß in einem Projekt zwei Datenbanken gleichzeitig abgefragt werden müssen ... Theoretisch ist meine Klasse so allgemein aufgebaut, daß ich einfach zwei Objektinstanzen bilden kann und beide mit unterschiedlichen DB-Infos (User, Pass, Server, DBName) versorgen kann, doch eigenartiger Weise führt das initialisieren des zweiten DB-Objektes dazu, daß die Connection des ersten mit der des zweiten überschrieben wird. Scheinbar greifen die Instanzen über $this nicht auf ihre eigenen Variablen, sondern auf die der Mutterklasse zu, ansonsten kann ich mir nicht erklären, warum die Variable $CONN der ersten DB nach der Initialisierung der zweiten DB deren $CONN enthält.

Irgendwelche Ideen?
Gruß Patrique



Die Klasse clsMySQL in mysql.php:
============================
Class clsMySQL
{
var $USER; // Benutzer-Login
var $PASS; // Passwort
var $SERVER; // Server-Name
var $DBNAME; // Datenbank-Name
var $CONN; // Connection

function init ($user, $pass, $server, $dbname)
{
$this->USER = $user;
$this->PASS = $pass;
$this->SERVER = $server;
$this->DBNAME = $dbname;

$conn = mysql_connect($server, $user, $pass);
if(!$conn)
{
echo "Connection konnte nicht aufgebaut werden<BR>n";
}
if(!mysql_select_db($dbname, $conn))
{
echo "DBSelect konnte nicht ausgeführt werden<BR>n";
}
$this->CONN = $conn; // !!!! HIER SCHEINT DAS PROBLEM ZU LIEGEN
return true;
} // function init

... Hier folgen alle Methoden der Klasse, die ich aus Platzgründen hier auslasse
}

Die Objektinstanzierung:
============================
...
include("mysql.php");

// MySQL-Instanzen ableiten
$db1 = new clsMySQL;
$db2 = new clsMySQL;

// MySQL-Instanzen initialisieren
if (!$db1->init($DB1_USER, $DB1_PASS, $DB1_SERVER, $DB1_DBNAME))
{
echo "Datenbank (db1) konnte nicht geöffnet werden<BR>n";
exit;
}

if (!$db2->init($DB2_USER, $DB2_PASS, $DB2_SERVER, $DB2_DBNAME))
{
echo "Datenbank (db2) konnte nicht geöffnet werden<BR>n";
exit;
}
...

Ben20
22.08.2002, 13:59:21
Ich kenne mich mit PHP Klassen nicht aus. Aber wenn Du zweimal hintereinander mysql_connect() machst Du bei die gleichen Attribute für Server, Benutzername und Passwortverwendst, macht PHP beim zweitenmal keine neue Verbindung auf, sondern benutzt die erste.

SPiC
22.08.2002, 13:59:30
U.u. könnte es helfen, wenn Du den Parameter new_link (oder maybe new_link=TRUE) in mysql_connect() einfügst also


$conn = mysql_connect($server, $user, $pass, new_link=TRUE);

patrique
22.08.2002, 14:14:56
Die Verwendung von new_link, bzw. new_link=TRUE als zusätzlicher Parameter ergibt folgende Fehlermeldungen:

new_link:
Notice: Use of undefined constant new_link - assumed 'new_link' in C:ProgrammeApache2htdocsapomysql.php on line 22

new_link=TRUE:
Parse error: parse error, unexpected '=' in C:ProgrammeApache2htdocsapomysql.php on line 22
Fatal error: Cannot instantiate non-existent class: clsmysql in Z:wwwtest.php on line 8

patrique
22.08.2002, 14:18:12
Original geschrieben von Ben20
Ich kenne mich mit PHP Klassen nicht aus. Aber wenn Du zweimal hintereinander mysql_connect() machst Du bei die gleichen Attribute für Server, Benutzername und Passwortverwendst, macht PHP beim zweitenmal keine neue Verbindung auf, sondern benutzt die erste.

Passiert das auch, wenn eine andere Datenbank angegeben ist und alle anderenParameter gleich sind? Und falls ja, gibt es eine Möglichkeit eine separate Connection zu erzwingen?

SPiC
22.08.2002, 14:18:58
new_link funktioniert erst ab 4.2.0, kann ja sein, dass Dein PHP < 4.2.0 ist.

patrique
22.08.2002, 14:33:52
Original geschrieben von SPiC
new_link funktioniert erst ab 4.2.0, kann ja sein, dass Dein PHP < 4.2.0 ist.

Wow! Treffer ... versenkt. hab gerade 4.2.2. runtergeladen und eingespielt und es funktioniert folgendermaßen:


$conn = mysql_connect($server, $user, $pass, TRUE);

SPiC
22.08.2002, 14:36:50
Und schon wieder ein Problem gelöst.

Diesmal in 48min... *g*

patrique
22.08.2002, 14:46:32
SPiC >> In der Tat eine spitzen Leistung :) Vielen Dank nochmal.

SPiC
22.08.2002, 15:17:48
Ach was... Matt und Ben20 sind meistens viel schneller als ich...