mehrere datenbanken in 4.6.15 einbinden

Gesperrt
Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

mehrere datenbanken in 4.6.15 einbinden

Beitrag von Vetinari » Fr 12. Okt 2007, 09:45

hallo,

ich möchte neben meiner datenbank mit den contenido tabellen noch weitere datenbanken einbinden (z.b. für einen shop).
wie mache ich das am elegantesten? eine weitere config datei erstellen und im entsprechenden module per include aufrufen?

gruss, V.
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.

tinof
Beiträge: 197
Registriert: Mi 24. Jan 2007, 20:38
Wohnort: Kirchberg / Sa.
Kontaktdaten:

Beitrag von tinof » Fr 12. Okt 2007, 15:00

Hallo,
ich weiss zwar nicht, ob das die eleganteste Lösung ist, aber ich habe mir wie folgt geholfen.
Ich musste mich für ein Projekt mit einer Datenbank des xtCommerce - Shops verbinden. Ich habe mir dazu analog der Klasse DB_Contenido die folgende von der DB_SQL abgeleitete Klasse gebaut (datei xtc_db.php):

Code: Alles auswählen

<?php
/*
 * Access to XTC - DB (catalog)
 *
 *
 */

// this is a COPY of DB_Contenido (see local.php)
//require_once('db_mysql.inc');

cInclude("conlib", "db_mysql.inc");

class DB_XTC extends DB_Sql {

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

  var $Halt_On_Error = "report";

  //Konstruktor
  function DB_XTC($Host = "", $Database = "", $User = "", $Password = "")
  {
      global $xtc_host, $xtc_database, $xtc_user, $xtc_password;

	  if ($Database)
	  {
	  		$this->Database = $Database;
	  } else {
	  		$this->Database = $xtc_database;
	  }

	  if ($Host)
	  {
	  		$this->Host = $Host;
	  } else {
	  		$this->Host = $xtc_host;
	  }

	  if ($User)
	  {
	  		$this->User = $User;
	  } else {
	  		$this->User = $xtc_user;
	  }

	  if ($Password)
	  {
	  		$this->Password = $Password;
	  } else {
			$this->Password = $xtc_password;
	  }

  }

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

?>
Außerdem habe ich eine passende config - Datei gechrieben, die (unter anderem) die Login - Parameter aufnimmt.

Code: Alles auswählen

<?php
/**********************************
* Connection Contenido / xtCommerce
* global config
* Tino Fäustel
* 13.02.2007
**********************************/


global $xtcfg;

/* ---------------------*/
/* Database - Settings */
/* ---------------------*/

/* ATTENTION ! these settings must be different to */
/* the Contenido  - login ! Otherwise you get a uncalculated merging */
/* of the db - sessions ; see php manual mysql_connect (,,,[new Connection]) */
$xtc_host = '*****';
$xtc_user = '****';
$xtc_password = '*****';

// weiteres .....
?>
Wichtig: Man darf nicht mit den gleichen Zugangsdaten wie für die Contenido - DB - Anmeldung arbeiten, weil sich sonst die Datenbanken 'vermischen'. Also unbedingt für die zweite Datenbank einen eigenen Benutzernamen autorisieren, sonst müßte man noch in der DB_SQL() - Klasse herumbauen. (Diese Erkenntnis hat mich 21456 graue Haare gekostet :-) )

Verwenden kann man das dann genauso wie die DB_Contenido:

Code: Alles auswählen

include({pfad}xtc_config.php);
include({pfad}xtc_db.php);

$xtcdb = new db_xtc;
$xtcdb->query(...)
usw.
Mit den Pfadangaben bin ich mir noch nicht so recht sicher, ich habe meine eigenen Erweiterungen alle in einem eigenen Unterordner, ich muss das aber dann bei Umzügen o.ä. immer manuell anpassen.
Besser wäre die ganze Mimik wahrscheinlich in contenido\classes oder so aufgehoben, wo man es per cinclude() 'relativ' einbinden kann. Die Zugangsdaten ($xtc_host usw.) könnte man wahrscheinlich auch sauber in einer config.local.php unterbringen. Bitte mal probieren.

Ich denke, wenigstens das Prinzip wird deutlich.

Grüße
Tino
[/code]
Für die Freizeit : www.hobbybrauer.de

Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

Beitrag von Vetinari » Mo 15. Okt 2007, 07:18

prima, danke! werd's ausprobieren ...

gruss, V.
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.

Gesperrt