Ergebnis 1 bis 8 von 8

Thema: 2 Datenbanken nutzen

  1. #1
    Contao-Nutzer
    Registriert seit
    23.07.2009.
    Ort
    mal hier, mal da
    Beiträge
    141
    Partner-ID
    5687

    Frage 2 Datenbanken nutzen

    Hallo,

    ich will in einem Skript Daten aus einer DB auslesen und in die Contao-DB einspielen. Die contao-eigene Klasse verbindet aber automatisch mit der DB aus der localconfig.php. Kann ich mit Bordmitteln daneben noch eine Verbindung zu einer anderen DB aufbauen, oder muss ich mir dafür erst 'ne neue Klasse schreiben?

    Danke!

    Viele Grüße,
    raveolution

  2. #2
    Contao-Nutzer Avatar von p7ha
    Registriert seit
    18.02.2010.
    Ort
    Waiblingen
    Beiträge
    46

    Standard

    Im TYPOlight/Contao-Buch steht dazu folgendes:
    (ich schreibs jetzt echt ab)

    Klasse $this->Database
    Methode setDatabase()

    "Mit dieser Methode können Sie zu einer anderen Datenbank wechseln, jedoch nur, wenn diese über dieselbe Datenbankverbindung erreichbar ist."

    Das ginge dann so: $this->Database->setDatabase('alternativ');
    (Contao Handbuch Seite 263)

    Wenn es ne komplett andere DB ist wirds hart! Da musst du ne extra Datenbankverbindung via mysql_.. machen.
    Viele Grüße, Peter

  3. #3
    Contao-Nutzer
    Registriert seit
    23.07.2009.
    Ort
    mal hier, mal da
    Beiträge
    141
    Partner-ID
    5687

    Standard

    Danke für die Antwort!

    Es ist leider ne komplett andere DB. Nur der Server auf den beide Datenbanken liegen ist gleich.

    Evtl. brauche ich auch beide paralell. Dann geht das so auch nicht mehr.

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.619
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Stephan,

    Das ist mit der DB-Klasse nicht möglich, aber du kannst einfach ein mysql_connect machen...
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Nutzer
    Registriert seit
    23.07.2009.
    Ort
    mal hier, mal da
    Beiträge
    141
    Partner-ID
    5687

    Standard

    Hallo Andreas,

    danke für deine Antwort. Dann schreibe ich mir in Anlehnung an die Klassen in der DB_MySql.php eigene Klassen. Die kann man später vielleicht noch einmal nutzen.

  6. #6
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    385

    Standard

    Zitat Zitat von andreas.schempp Beitrag anzeigen
    Das ist mit der DB-Klasse nicht möglich, aber du kannst einfach ein mysql_connect machen...
    Wenn ich mir den Code anschaue, ist es durchaus möglich. Wenn man von den DB-Variablen in Globals ein Backup macht, dann die von der zweiten DB einträgt, anschließend die DB selber erzeugt (so das es nicht über getInstance geht) und anschließend das Backup der Globals zurückspielt, dürfte es funktionieren. Ist zwar nicht die schönste Lösung, aber dürfte klappen

  7. #7
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von SunBlack Beitrag anzeigen
    Wenn ich mir den Code anschaue, ist es durchaus möglich. Wenn man von den DB-Variablen in Globals ein Backup macht, dann die von der zweiten DB einträgt, anschließend die DB selber erzeugt (so das es nicht über getInstance geht) und anschließend das Backup der Globals zurückspielt, dürfte es funktionieren. Ist zwar nicht die schönste Lösung, aber dürfte klappen
    Nein, das geht nicht.
    Constructor ist private, $objInstance im falschen Scope (in der Basisklasse und nicht in der von dir abgeleiteten) etc. ppp.

    Man muss quasi die komplette DB Klasse kopieren, hab ich auch schon mal gemacht um ein Drittsystem anzubinden.

    Gruss
    Chris
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  8. #8
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    385

    Standard

    Zitat Zitat von xtra Beitrag anzeigen
    Constructor ist private
    Hast Recht, das hab ich übersehen (Konstruktoren sind bei mir immer public [oder per Namespace abgetrennt, so dass die anderen Klassen die Klasse gar nciht erst sehen] )

    Zitat Zitat von xtra Beitrag anzeigen
    Constructor ist private
    $objInstance im falschen Scope (in der Basisklasse und nicht in der von dir abgeleiteten) etc. ppp.[/QUOTE]
    Wofür brauchst du das? Wenn du getInstance nicht benutzt ist dir der Inhalt von dieser Variablen egal und $objInstance wird nur für das Singleton gebraucht, ansonsten nicht (soweit ich das eben sehe)

    Zitat Zitat von xtra Beitrag anzeigen
    Man muss quasi die komplette DB Klasse kopieren, hab ich auch schon mal gemacht um ein Drittsystem anzubinden.
    Vererben und einfach eine weitere public static Methode einfügen, die den Konstruktor umgeht. Ich habe mal (ungetestet etwas skizziert):

    PHP-Code:
    class MyDB extends Database{
        public static function 
    connectTo($host$user$pass$db){
            
    $orgHost $GLOBALS['TL_CONFIG']['dbHost'];
            
    $orgUser $GLOBALS['TL_CONFIG']['dbUser'];
            
    $orgPass $GLOBALS['TL_CONFIG']['dbPass'];
            
    $orgDb     $GLOBALS['TL_CONFIG']['dbDatabase'];
            
            
    $GLOBALS['TL_CONFIG']['dbHost'] = $host;
            
    $GLOBALS['TL_CONFIG']['dbUser'] = $user;
            
    $GLOBALS['TL_CONFIG']['dbPass'] = $pass;
            
    $GLOBALS['TL_CONFIG']['dbDatabase'] = $db;
            
            
    //eingebunden muss die Klasse bereits etc. (siehe Database getInstance)
            
    $strClass 'DB_' ucfirst(strtolower($GLOBALS['TL_CONFIG']['dbDriver']));
            
    $dbInst = new strClass();
            
            
    $GLOBALS['TL_CONFIG']['dbHost'] = $orgHost;
            
    $GLOBALS['TL_CONFIG']['dbUser'] = $orgUser;
            
    $GLOBALS['TL_CONFIG']['dbPass'] = $orgPass;
            
    $GLOBALS['TL_CONFIG']['dbDatabase'] = $orgDb;
            
            return 
    $dbInst;
        }

    Dürfte funktionieren wenn beide DBs vom gleichen Typ sind. Ansonsten wird es schwer wegen dem define DB_DRIVER.

    Btw: Sollte man da vlt. mal eine Änderung Vorschlagen, so dass eine Anbindung einer zweiten DB einfacher wird? Neben raveolution und dir, xtra, hatte ich noch einen der mich per PN mal wegen so einem Problem angeschrieben hatte. Scheint also nicht so extrem exotisch zu sein. Wäre also evtl. nen Vorschlag für v3. Was meint ihr?

    €: Alternatives Handling wegen dem erzeugen, wo Leos Fehlerbvehandlung schon mit enthalten ist:
    PHP-Code:
    class MyDB extends Database{
        public static function 
    connectTo($host$user$pass$db){
            
    $orgHost $GLOBALS['TL_CONFIG']['dbHost'];
            
    $orgUser $GLOBALS['TL_CONFIG']['dbUser'];
            
    $orgPass $GLOBALS['TL_CONFIG']['dbPass'];
            
    $orgDb     $GLOBALS['TL_CONFIG']['dbDatabase'];
            
    $orgInst self::$objInstance;
            
            
    $GLOBALS['TL_CONFIG']['dbHost'] = $host;
            
    $GLOBALS['TL_CONFIG']['dbUser'] = $user;
            
    $GLOBALS['TL_CONFIG']['dbPass'] = $pass;
            
    $GLOBALS['TL_CONFIG']['dbDatabase'] = $db;
            
            
    self::$objInstance nil;
            
    $dbInst self::getInstance();
            
    self::$objInstance $orgInst;
            
            
    $GLOBALS['TL_CONFIG']['dbHost'] = $orgHost;
            
    $GLOBALS['TL_CONFIG']['dbUser'] = $orgUser;
            
    $GLOBALS['TL_CONFIG']['dbPass'] = $orgPass;
            
    $GLOBALS['TL_CONFIG']['dbDatabase'] = $orgDb;
            
            return 
    $dbInst;
        }

    Geändert von SunBlack (22.07.2010 um 18:05 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. mysql-datenbanken mischen sich
    Von louthi im Forum Installation / Update
    Antworten: 3
    Letzter Beitrag: 25.02.2011, 10:13
  2. Integration von Autobörsen / Datenbanken möglich?
    Von Didl im Forum Sonstige Erweiterungen
    Antworten: 2
    Letzter Beitrag: 31.03.2010, 12:30
  3. mehrere Datenbanken möglich
    Von hanuman im Forum Entwickler-Fragen
    Antworten: 6
    Letzter Beitrag: 06.01.2010, 10:05

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •