Mehrere Instanzen einer Datenbankverbindung mit PEAR::MDB2 und statischemDatenbankhandler

Mehrere Instanzen einer Datenbankverbindung mit PEAR::MDB2 und statischemDatenbankhandler

am 21.09.2006 11:45:36 von Helmuth Gronewold

Hallo NG,

ich schreibe gerade ein Skript, welches mir Daten in eine Datenbank
schreibt. Ich benutze dafür PEAR::MDB2 und habe nun ein Problem mit dem
statischen Datenbankhandler.
Ich brauche 3 Verbindungen zur Datenbank:
- Lesen
- Schreiben
- Lesen aus einer openGeoDB

Das doofe ist, dass mir der klasseninterne Datenbankhandler beim
aufrufen von MDB2::factory(); jedes mal überschrieben wird.

Mein Skript sieht ungefähr so aus:

// file Tools.php
class Tools {
[...]
public static function getZipcode ($location, $dbDsnReadGeo) {
$dbReadGeo = MDB2::factory($dbDsnReadGeo);
//do database stuff
}
[...]
}

// file mainScript.php
$dbRead = MDB2::factory($dbDsnRead);
$dbWrite = MDB2::factory($dbDsnWrite);

while ($something) {
Tools::getZipcode($myLocation, $dbDsnReadGeo);
// do read and write stuff with $dbRead and $dbWrite
// hier benutze ich auch $dbWrite->extended->autoExecute();
}
?>

Das Skript endet mit der Meldung:
[Native message: Table 'opengeodb.mytable' doesn't exist]

Es wird also der Datenbankhandler der GeoDB-Verbindung benutzt.

Wenn ich versuche die Verbindungen zu instanziieren
($dbRead=new MDB2(); $dbRead->connect($dbDsnRead)), gibt es einen Fehler
der wegen MDB2::query(); meckert. Allerdings rufe ich query() so
nirgendwo auf sondern immer mit $dbRead->query();

Ich habe ausserdem probiert, das MDB2-Objekt $dbReadGeo mit
$dbReadGeo->disconnect(); und unset($dbReadGeo); zu behandeln aber das
will nicht helfen :(

Hat einer von euch einen Tipp für mich?

Gruß,
Helmuth

Re: Mehrere Instanzen einer Datenbankverbindung mit PEAR::MDB2 undstatischem Datenbankhandler

am 21.09.2006 14:01:05 von Helmuth Gronewold

Helmuth Gronewold schrieb:
> Mein Skript sieht ungefähr so aus:
>
> > // file Tools.php
> class Tools {
> [...]
> public static function getZipcode ($location, $dbDsnReadGeo) {
> $dbReadGeo = MDB2::factory($dbDsnReadGeo);
> //do database stuff
> }
> [...]
> }
>
> // file mainScript.php
> $dbRead = MDB2::factory($dbDsnRead);
> $dbWrite = MDB2::factory($dbDsnWrite);
>
> while ($something) {
> Tools::getZipcode($myLocation, $dbDsnReadGeo);
> // do read and write stuff with $dbRead and $dbWrite
> // hier benutze ich auch $dbWrite->extended->autoExecute();
> }
> ?>

Wenn ich nach Tools::getZipcode(); jedes mal die Datenbank-Verbindung
neu aufbaue geht es.

Das ist natürlich mit massig Overhead verbunden und nur ein ganz
schmutziger Workaround...