Kurztutorial - richtig SQL mit Drupal
Eingetragen von derjochenmeyer@... (591) am 25.11.2007 - 22:03 Uhr
Für Drupal Um- und Einsteiger: SQL auf drupalish mit entsprechenden drupal Funktionen:
<?php
// Alle veröffentlichten story nodes auswählen (alternativ 'page', 'blog'. 'deinContentTyp').
$sql = "SELECT * FROM {node} WHERE type = 'story' AND status = 1";
// db_query() macht die Abfrage, db_rewrite_sql() ist wichtig damit access rules beachtet werden.
$result = db_query(db_rewrite_sql($sql));
// Mit while() alle gefundenen Elemente der Abfrage abarbeiten.
// db_fetch_object() gibt die Resultate als Objekte aus (also mit "->" ansprechen).
while ($data = db_fetch_object($result)) {
// Mit node_load() komplettes node objekt laden. Auch hier die einzlenen Elemente üder "->" ansprechen.
$node = node_load($data->nid);
// print $node->nid; // Node ID ausgeben
// print $node->title; // Node Title ausgeben
// Was es alles auszugeben gibt? Testhalber mal folgendes auskommentieren:
// print "<pre>";
// print_r($node);
// print "</pre>";
// Links zu den nodes ausgeben.
print '<a href="node/' . $node->nid. '">' . $node->title . '</a>';
}
?>
- Anmelden oder Registrieren um Kommentare zu schreiben
Übrigens SELECT * FROM ist
am 04.12.2007 - 10:12 Uhr
Übrigens
SELECT * FROM
ist wichtig. Ich hatte gerade ein Problem mitSELECT nid FROM
. Die explizite auswahl von "nid" hat zu ner SQL Fehlermeldung geführt. Weis jemand mehr dazu?» forward-media.de Drupal Entwicklung | Drupal Tutorials
Wie sieht denn die
am 04.12.2007 - 11:56 Uhr
Wie sieht denn die Fehlermeldung aus?
gruß pebosi
gruß pebosi
--
https://pebosi.net
Danke der Nachfrage. Ist
am 10.12.2007 - 01:07 Uhr
Danke der Nachfrage. Ist nicht reproduzierbar. Hatte wohl doch nichts damit zu tun :)
» forward-media.de Drupal Entwicklung | Drupal Tutorials
Security: SQL-Injection beachten
am 11.04.2008 - 10:47 Uhr
Hi,
Drupal liefert von sich aus auch Security Features gegen SQl-Injection und XSS mit.
Dies sollte beachtet werden, vor allem wenn man Tutorial schreibt.
Der Code korrekt:
<?php
// Alle veröffentlichten story nodes auswählen (alternativ 'page', 'blog'. 'deinContentTyp').
$sql = "SELECT * FROM {node} WHERE type = '%s' AND status = %d ";
// db_query() macht die Abfrage, db_rewrite_sql() ist wichtig damit access rules beachtet werden.
$result = db_query(db_rewrite_sql($sql, 'story', 1));
/*
Es werden Platzhalter im SQL-Statement gesetzt, die dann später durch die Variablen ersetzt werden. Dabei checkt Drupal, ob die Variablen zum Typ des Platzhalters passen ( '%s' = string, %d = Zahl)
*/
// Mit while() alle gefundenen Elemente der Abfrage abarbeiten.
// db_fetch_object() gibt die Resultate als Objekte aus (also mit "->" ansprechen).
while ($data = db_fetch_object($result)) {
// Mit node_load() komplettes node objekt laden. Auch hier die einzlenen Elemente üder "->" ansprechen.
$node = node_load($data->nid);
print '<a href="node/' . $node->nid. '">' . $node->title . '</a>';
/*ALTERNATIV */
print l($node->title, 'node/'.$node->nid); /* l() ist die Drupal Funktion um links zu erstellen
}
?>
Diese Platzhalter sind sehr
am 10.05.2008 - 07:31 Uhr
Diese Platzhalter sind sehr nützlich wenn man Usereingaben oder Variablen, die in irgendeiner From verarbeitet oder übertragen werden in den SQL Statements verwendet. Wenn man den Status oder den nodetype abfragt braucht man diese Platzhalter nicht. Grund: keine Gefahr, weil statischer Wert.
» forward-media.de Drupal Entwicklung | Drupal Tutorials