Datenbank Klasse verwenden: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Beispeil einer Ausgabe nach Lesezugriff)
(Datensätze schreiben: INSERT-Beispiel ergänzt)
Zeile 67: Zeile 67:
 
</source>
 
</source>
  
Diese Methode funktioniert natürlich auch mit einem INSERT Statement.
+
Diese Methode funktioniert natürlich auch mit einem INSERT-Statement:
 +
 
 +
<source lng="php">
 +
$set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL');
 +
$this->Database->prepare("INSERT INTO tl_log %s")->set($set)->execute();
 +
</source>
  
 
== Das Ergebnis auswerten ==
 
== Das Ergebnis auswerten ==

Version vom 8. März 2016, 12:56 Uhr

MsgError.png Unvollständiger Artikel: dieser Artikel ist noch nicht sauber bearbeitet.

Bitte erweitere ihn und entferne erst anschliessend diesen Hinweis.


Informationen zur Datenbank-Klasse

Contao bietet für Entwickler eine Klasse an, um mit der Datenbank zu kommunizieren. Diese sollte beim Entwickeln von Erweiterungen unbedingt verwendet werden!

Die Datenbank-Klasse bietet mehrere Vorteile:

  • Die Daten werden "gesäubert" und störende Zeichen maskiert
  • Ein Objekt der Klasse Database_Result wird zurückgegeben. Dieses enthält alle Informationen zum Query
  • Ersparnis von Schreibarbeit

Operationen auf der Datenbank

Die Beispiele setzen voraus, dass zuvor das Datenbank-Modul geladen wurde:

$this->import('Database');

Datensätze lesen

Lesen von Datensätzen ohne Bedingung

$result = $this->Database->prepare("SELECT * FROM tl_log")->execute();

Ausgeben der Datensätze

echo $result->numRows; // Anzahl der gefundenen Datensätze ausgeben
echo $result->id; // ID des 1. Datensatzes ausgeben
// Und alle anderen ID's ausgeben
while($result->next())
{
  echo $result->id;
}

Lesen von Datensätzen mit Bedingung

$result = $this->Database->prepare("SELECT * FROM tl_log WHERE id=?")->execute(1);
$result = $this->Database->prepare("SELECT * FROM tl_log WHERE id=? OR id=?")->execute(1, 5);

Die Fragezeichen sind Wildcards. Sie werden der Reihenfolge nach von den Parametern der execute-Funktion ersetzt. Dabei werden die parameter escaped, also für die Datenbank aufbereitet. Das schützt allerdings nicht vor boshaften Benutzereingaben. Diese sollten immer mit der Input-Klasse verarbeitet werden!

Datensätze schreiben

Datensätze können auch über die Datenbank-Klasse geschrieben werden. Es gibt dafür zwei Möglichkeiten.

Einzelne Werte per Wildcard setzten

$this->Database->prepare("UPDATE tl_log SET source = ? WHERE id=?")->execute('BE', 12345);

Mehrere Werte per set-Methode setzten

$set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL');
$this->Database->prepare("UPDATE tl_log %s WHERE id=?")->set($set)->execute(12345);

Diese Methode funktioniert natürlich auch mit einem INSERT-Statement:

$set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL');
$this->Database->prepare("INSERT INTO tl_log %s")->set($set)->execute();

Das Ergebnis auswerten

Tipps & Tricks

Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Kann es sein, dass sich SyncCto bei Sync->Client anders verhält als umgegekehrt also Sync->Server ?
<xtra> ja, da laufen die Daten in die andere Richtung *scnr*

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge