Seite 1 von 1

mehrere datenbanken in 4.6.15 einbinden

Verfasst: Fr 12. Okt 2007, 09:45
von Vetinari
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.

Verfasst: Fr 12. Okt 2007, 15:00
von tinof
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]

Verfasst: Mo 15. Okt 2007, 07:18
von Vetinari
prima, danke! werd's ausprobieren ...

gruss, V.