Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

[gelöst] Datenbankabfrage in Drupal 7 macht Probleme

Eingetragen von crjack (11)
am 05.02.2011 - 12:08 Uhr in
  • Anfängerfragen
  • Drupal 7.x

Hallo zusammen,
ich habe gerade Drupal 7 installiert und bin bisher schwer begeistert.
Allerdings versuche ich gerade in einem Node mit aktiviertem PHP-Filter testweise auf eine andere Datenbank zuzugreifen und mir einfach eine unformatierte Liste auszugeben.

Mit "db_set_active" habe ich bereits erfolgreich eine andere DB eingebunden. Sofern ich in der foreach-Schleife nichts einfüge kommt auch keine Fehlermeldung. Allerdings kann ich mittels foreach mit den Daten nichts anfangen.
Bekomme jedesmal folgende Fehlermeldung:

Zitat:

"Notice: Undefined property: stdClass::$ID in eval() (Zeile 17 von /kunden/304508_32130/drupal/modules/php/php.module(75) : eval()'d code)."

Hier mein Ausschnitt aus der Code:

$sql = "SELECT ID, strKursname FROM tbl_Kurse WHERE 1=1";
$result = db_query($sql);

foreach ($result as $row) {
    echo $row->ID;
}

Die abgefragte mySQL Tabelle hat die Felder ID, strKursname und andere - ich will hier eigentlich einfach nur alle Zeilen mit jeweils der ID ausgeben und bekomme das einfach nicht hin.

Vielleicht kann mir ja jemand weiterhelfen - bin nicht so der PHP / mySQL Crack ;-)

‹ Wie kann ein Redakteur eine Seite aus verschiedenen Elementen selbständig zusammensetzen? Kaum Drupal7 Themes- probs mit Drupal6 Themes ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ohne jetzt in die Details zu

Eingetragen von wla (9461)
am 05.02.2011 - 13:21 Uhr

Ohne jetzt in die Details zu sehen glaube ich, daß Du die Drupal6 Api verwendet hast und nicht die Drupal7 Api für die beiden Aufrufe. Da gibt es gravierende Unterschiede. Du solltest Dir die Dokumentation auf drupal.org dazu noch einmal ansehen.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi also

Eingetragen von Hyp1 (1463)
am 05.02.2011 - 13:38 Uhr

ohne die Drupal 7 API zu lesen.
Glaube ich das geht normalerweise schon so.
Aber er muss
nach dem db_query auch ein passendes resultset
mit db_fetch_object oder db_fetch_array holen.
db_query gibt normalerweise doch nur TRUE oser FALSE zurück
denn der query könnte ja auch ein INSERT oder DELETE sein.
Oder wenn es ein SELECT ist einen Pointer auf das Resultset
LG

  • Anmelden oder Registrieren um Kommentare zu schreiben

Änderungen in Drupal 7

Eingetragen von crjack (11)
am 05.02.2011 - 13:42 Uhr

Dachte auch ich könnte mit db_fetch_object arbeiten - aber seit Drupal 7 gibt es das so wohl nicht mehr.
Habe mir das auch schon in der API angeschaut - da steht allerdings nur drin - "Do stuff with $record, wich is an object" - und genau da liegt ja mein Problem - wie mache ich damit irgendwas???

// Drupal 6
while ($record = db_fetch_object($result)) { 
// Do stuff with $record, which is an object}

// Drupal 7
foreach ($result as $record) { 
// Do stuff with $record, which is an object}

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das steht doch auch in dem

Eingetragen von wla (9461)
am 05.02.2011 - 15:01 Uhr

Das steht doch auch in dem Beispiel hier

<?php
// Drupal 7
// Notice the place holders are now done using the same syntax as PDOs (:uid)
// Placeholders also don't need to be quoted anymore.
$uid = 1;
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid'
, array(':uid' => $uid));
// Result is returned as a iterable object that returns a stdClass object on each iteration
foreach ($result as $record) {
 
// Perform operations on $record->title, etc. here.
  // in this example the available data would be mapped to object properties:
  // $record->nid, $record->title, $record->created
}

// Same example in Drupal 6
$uid = 1;
$result = db_query("SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = %d"
, $uid);
while (
$record = db_fetch_object($result)) {
 
// Perform operations on $record->title, etc. here.
}
// NOTE: db_fetch_object and db_fetch_array have been removed from D7!

?>

Du mußt die einzelnen Rekords als Objekte ansprechen. Also mußt Du auf die Elemente des Rekord mit dem Zeigersymbol zugreifen. Steht aber auch in dem Beispiel.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ahh du hast recht

Eingetragen von Hyp1 (1463)
am 05.02.2011 - 15:09 Uhr

ich habe hier mal nachgesehen
http://drupal.org/update/modules/6/7#dbtng
da fragt sich was db_query zurückgibt ein Array von Objekt oder ein
normales array?

Gib mal mit einem var_dump oder print_r die $row variable aus.
Dann siehst Du was es ist und welche Felder es hat.

Zitat:

$sql = "SELECT ID, strKursname FROM tbl_Kurse WHERE 1=1";
$result = db_query($sql);

foreach ($result as $row) {
var_dump($row);
}

PS:
sollte es ein $result ein Resultset Array und kein Objekt sein, musst du $row["ID"] schreiben.

LG

  • Anmelden oder Registrieren um Kommentare zu schreiben

Fehler gefunden

Eingetragen von crjack (11)
am 05.02.2011 - 15:24 Uhr

Super - vielen Dank für den Hinweis mit "var_dump"!

Habe dadurch folgende Ausgabe bekommen:

object(stdClass)#3 (2) { ["id"]=> string(1) "1" ["strkursname"]=> string(31) "Text" }

und festgestellt, dass alle Tabellen-Felder bei der Ansprache des Objekts klein geschrieben werden müssen - obwohl diese in der mySQL DB teilweise auch groß geschrieben sind.

mit:

foreach ($result as $row) {
echo $row->id;
}

funktioniert alles einwandfrei :-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 6 Tagen
  • Hey danke
    vor 1 Woche 6 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 18 Stunden
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 2 Tagen
  • In der entsprechenden View
    vor 3 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 2 Tagen
  • gelöst
    vor 5 Wochen 6 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 18 Minuten

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 32 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association