Skip to Content

Arbeiten mit der Datenbank

Drupal ist in der Lage mit verschiedenen Datenbanken zu arbeiten. Die Auswahl wird in der Regel bei der Instalation getroffen. Ferner ist Drupal in der Lage auch weitere Datenbanken (exterene Datenbanken) einzubinden. Die Einbindung der Datenbank ist im Script ./sites/default/settings.php niedergelegt.
$db_url = 'mysql://username:password@localhost/databasename';
oder
$db_url = 'mysqli://username:password@localhost/databasename';
oder
$db_url = 'pgsql://username:password@localhost/databasename';
 
$db_prefix = '';

Mit dem Prefix $db_prefix = ''; kann ein Datenbank-Prefix, z. B. drupal_tablename, festgelegt werden. Diese Option ist immer dann zu empfehlen, wenn man nicht nur mit Standard-Modulen arbeiten möchte oder mehrere Distributionen in einer Datenbank laufen lassen möchte. Hierbei ist einzig zu beachten das die Table in den Querys entsprechend gekennzeichnet sind SELECT * FROM {table_name};. Durch den Einsatz der geschweiften Klammer kann Drupal die entsprechenden Table-Prefixe ersetzen und parst die Query zu SELECT * FROM prefix_table_name (Funktion db_prefix_tables($spl) in Script ./includes/database.inc). Sobald Module mit ander User geteilt werden soll muss man darauf achten, man weiß ja nicht wie der andere User die Datenbank anlegt. Drupal stellt dann ein Reihe von Funktionen zur Verfügung mit denen die Datenbankoperationen ausgeführt werden können. Leider stehen nicht alle Funktionen aus dem PHP-Manual MySQL-Funktionen zur Verfügung. Diese können aber auch direkt aufgerufen werden, hier sollte man die Sicherheit der Abfragen beachten. Hier die wichtigsten Funktionen für MySQL (aus dem Script ./includes/datase.mysql.inc):

db_query($query)
Die Grundfunktion der Query. Hier nutzt Drupal die "Prepared Statements"-Syntax, bei der die Query "nackt", d. h. ohne Daten, übergeben wird und die Daten erst nach Prüfung eingefügt werden (siehe Erklärung nächste Seite).
db_affected_rows()
Gibt die Anzahl der betroffenen Zeilen einer Query zurück (für UPDATE, INSERT und DELETE).
db_error()
Gibt die Fehlermeldung einer Anfrage zurück. Leider fehlt hier die Funktion mysql_errno().
db_escape_string($text)
Setzt vor bestimmten Zeichen ein "/".
db_fetch_array($result)
Liefert ein Array mit dem Ergebnis einer Zeile der Abfrage; nur für SELECT-Anweisungen.
db_fetch_objekt($result)
Liefert ein Objekt mit dem Ergebnis. db_fetch_object() ähnelt db_fetch_array(), mit einem Unterschied - ein Objekt wird zurück geliefert anstatt eines Arrays. Indirekt bedeutet dies, dass Sie die Daten nur mit ihren Feldnamen und nicht mit dem Offset ansprechen können (Nummern sind ungültige Namen für Eigenschaften).
db_next_id($name)
Da Drupal keine auto_increment in den Datenbanken verwendet, wird über die Funktion db_next_id($name) der nächste frei Key geholt. Normalerweise ist das der größte Key + 1. Drupal kann etwas durcheinanderkommen, wenn Schlüssel manuel in der Datenbank gelöscht werrden - also Vorsicht. Die Syntax ist einfach $name = {table_name}_gewünschteID, also z. B. die nächste freie UID $naechsterUser = db_next_id('{users}_uid');.
db_num_rows($result)
Anzahl der Treffer eines SELECTS.
db_table_exists($table)
Abfrage ob eine bestimmte Tabelle vorhanden ist.

Für MySQLI und PostgreSQL stehen ähnliche Scripte mit gleichen Funktionen unter ./includes/datase.mysqli.inc und ./includes/datase.pgsql.inc bereit.

Kommentare

cheap viagra online

cialis

tcxdncb cialis BwhwX viagra 2542 viagra %-[[[ genericcialis 7048

generic viagra

xuqaav generic viagra 8]]] cialis 4690 generic cialis BsFcO viagra sale >:-[

cialis

yorlgxey cialis VQzpAh cialis 8]]] viagra 2562 viagra 0999

payday loans

yhdqdf payday loans >:-[ payday loan :-O payday loans >:]]

payday loan Canada

levitra billig

cemvwiis levitra billig qkLCiU xenical bVoHeT Cialis 8120 viagra 3250 viagra gvQIgk

levitra

gbypvjy levitra LuHFHU viagra online %-[[[ cialis DnhmG cialis 2372 cialis 7271 viagra >:-[

viagra

papnvqsc viagra >:]] cialis >:-[ cialis >:-[ viagra FbnWm cialis online 6989 viagra 6941

cialis

endgophu cialis :-O cialis MnrmK viagra YNBXij viagra online %-[[[ viagra zvSKB cialis =-]

instant cash advance