Daten aus MySQL-Datenbank anzeigen
am 25.03.2009 - 17:32 Uhr in
Hallo zusammen,
ich habe eine MySQL-Datenbank auf dem gleichen Server wie Drupal.
Darauf sind für für Maschinen Detaildaten abgelegt.
Ich möchte nun auf die Datenbank zugreifen gezielt mit dem Schlüssel einer Maschine
($sql = 'SELECT `MAS_PRODGRP`,`MAS_MARKE`,`MAS_BAUJAHR` FROM `Objekt` WHERE `MAS_KEY` = 1001 LIMIT 0, 30';)
und die Detaildaten unter Drupal anzeigen.
Wie bette ich den PHP Code ein?
Ich wäre für eine Hilfe sehr dankbar!
Liebe Grüße
Klaus
- Anmelden oder Registrieren um Kommentare zu schreiben

Du musst erst mal ..
am 25.03.2009 - 20:40 Uhr
.. eine externe Datenbank in der settings.php definieren. Dann kannst du Drupal sagen benutze die DB (db_set_active('externe_db');), machst deine Abfragen und wechselst dann wieder zur Default-Datenbank (db_set_active('default');).
Das Ganze kannst du in einem eigenen Modul schreiben oder auch in einem Node, wenn du die PHP-Filter aktiviert hast. Als Code-Beispiel kannst du dir mal "Wechseln zu einer externen Datenbank" anschauen. Das ist für Drupal 5 geschrieben, hat sich aber nicht verändert. Was dort in den Funktionen beschrieben ist, funktioniert auch in den Nodes.
Gruß
UwBach
habs eingebaut, geht noch nicht!
am 25.03.2009 - 21:37 Uhr
Definition in settings:
$db_url['default'] = 'mysql://gcmDBdrupal:h5ehw4h@localhost/gcm_drupal';
$db_prefix = 'drupal_';
// externe Datenbank
$db_url['maschinen'] = 'mysql://admin:allahim@localhost/Maschinen';
Ich will nur die 3 Felder auslesen:
<?phpdb_set_active('Maschinen');
$sql = 'SELECT MAS_PRODGRP FROM Objekte WHERE MAS_KEY = 1001 LIMIT ;';
$result = db_query($sql, $prodgrp, $marke, $baujahr);
db_set_active('default');
Echo $prodgrp;
Echo $marke;
Echo $baujahr);
?>
es kommt die Fehlermeldung:
Parse error: parse error, unexpected ')', expecting ',' or ';' in /home/g/global-construction-machines.com/public_html/includes/common.inc(1547) : eval()'d code on line 13
was ist noch falsch?
Gruß Klaus
Hallo Klaus, Zunächst
am 26.03.2009 - 00:32 Uhr
Hallo Klaus,
Zunächst einmal kommt Dein Fehler von der überzähligen Klammer ) am Ende des letzten Echo.
Wegen des DB-Wechsels kann ich Dir nicht helfen (db_set_active), aber sieht IMO ok aus.
Die Daten aus der Fremdtabelle holen geht so (Zugriff auf eine Fremd-Tabelle innerhalb der Drupal-DB):
<?php
$id = 111;
$query_data= db_query(db_rewrite_sql("SELECT feld1, feld2 FROM meineTabelle WHERE id = $id"));
$data = db_fetch_object($query_data);
$feld1 = $data->feld1;
$feld2 = $data->feld2;
print "das ist feld 1: $feld1, und das ist feld 2: $feld2";
?>
hth
lg leda
danke für die Hilfe
am 26.03.2009 - 09:14 Uhr
Hallo Leda,
das sieht gut aus, habs schon eingebaut und er scheints zu kapieren,
nur sucht er auf der falschen Datenbank.
Das Umschalten ist jetzt das Problem.
Denn ohne Umschalten geht’s ja nicht, weil in deinen Anweisungen der Datenbankname nicht auftaucht.
Ich forsche weiter!
Gruß Klaus
Zeig mal den Code
am 26.03.2009 - 09:31 Uhr
ich vermute das du schon umgeschaltest hast bevor die Ergebnisse ausgewertet wurden.
<?php
// Array zur Aufnahme der Ergebnisse
$ergebnisse = array();
// Umschalten auf die externe DB
db_set_active('Maschinen');
$sql = 'SELECT MAS_PRODGRP FROM Objekte WHERE MAS_KEY = 1001 LIMIT 30;';
$result = db_query($sql, $prodgrp, $marke, $baujahr);
// Auf evtl. Fehler prüfen
if(db_error($result) == 0)
// Holen der Ergebnisse
while($erg = db_fetch_array($result))
$ergebnisse[] = $erg;
// Zurückschalten auf die normale DB
db_set_active('default');
// ausgeben aller Ergebnisse
print_r($ergebnisse);
Echo $prodgrp;
Echo $marke;
Echo $baujahr);
?>
habe mal was bei LIMIT eingetragen
Die Auswertung der Ergebnisse muss unter der externen DB erfolgen. Korrekt wäre es noch vor der WHILE eine Fehlerprüfung zu machen und im Fehlerfall sofort auf die DEFAULT-DB zurückzuschalten, sonst spinnt Drupal weil es seine DB nicht erreichen kann.
Gruß
UwBach
PS. Code ist nicht getestet