Datenbank Klasse verwenden: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Datensätze lesen)
(Datensätze lesen)
 
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 14: Zeile 14:
  
 
= Operationen auf der Datenbank =
 
= Operationen auf der Datenbank =
 +
 +
Die Beispiele setzen voraus, dass zuvor das Datenbank-Modul geladen wurde:
 +
 +
<source lang="php">
 +
$this->import('Database');
 +
</source>
  
 
== Datensätze lesen ==
 
== Datensätze lesen ==
Zeile 21: Zeile 27:
 
<source lang="php">
 
<source lang="php">
 
$result = $this->Database->prepare("SELECT * FROM tl_log")->execute();
 
$result = $this->Database->prepare("SELECT * FROM tl_log")->execute();
 +
</source>
 +
 +
'''Ausgeben der Datensätze'''
 +
 +
<source lang="php">
 +
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;
 +
}
 
</source>
 
</source>
  
Zeile 30: Zeile 48:
 
</source>
 
</source>
  
Die Fragezeichen werden durch die Parameter von ''execute'' ersetzt.
+
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!
 +
 
 +
'''Lesen von Datensätzen mit Limit'''
 +
 
 +
<source lang="php">
 +
$result = $this->Database->prepare("SELECT * FROM tl_log")->limit(30)->execute();
 +
$result = $this->Database->prepare("SELECT * FROM tl_log")->limit(30, 40)->execute();
 +
</source>
 +
 
 +
Das erste Beispiel liest die (ersten) 30 Datensätze, die mit der Suchbedingung (hier alle Datensätze) übereinstimmen. Das zweite Beispiel liest die 30 Datensätze ab Datensatz Nr. 40.
  
 
== Datensätze schreiben ==
 
== 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'''
 +
 +
<source lng="php">
 +
$this->Database->prepare("UPDATE tl_log SET source = ? WHERE id=?")->execute('BE', 12345);
 +
</source>
 +
 +
'''Mehrere Werte per set-Methode setzten'''
 +
<source lng="php">
 +
$set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL');
 +
$this->Database->prepare("UPDATE tl_log %s WHERE id=?")->set($set)->execute(12345);
 +
</source>
 +
 +
Diese Methode funktioniert natürlich auch mit einem INSERT-Statement. Hier das Beispiel, wo Sie anschließend auch gleich die ID des neuen Datensatzes bekommen:
 +
 +
<source lng="php">
 +
$set = array('tstamp' => time(), 'source' => 'BE', 'action' => 'GENERAL');
 +
$objInsert = $this->Database->prepare("INSERT INTO tl_log %s")->set($set)->execute();
 +
echo $objInsert->insertId;
 +
</source>
  
 
== Das Ergebnis auswerten ==
 
== Das Ergebnis auswerten ==

Aktuelle Version vom 20. August 2019, 10:42 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!

Lesen von Datensätzen mit Limit

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

Das erste Beispiel liest die (ersten) 30 Datensätze, die mit der Suchbedingung (hier alle Datensätze) übereinstimmen. Das zweite Beispiel liest die 30 Datensätze ab Datensatz Nr. 40.

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. Hier das Beispiel, wo Sie anschließend auch gleich die ID des neuen Datensatzes bekommen:

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

Das Ergebnis auswerten

Tipps & Tricks

Ansichten
Meine Werkzeuge

Contao Community Documentation

Atari Teenage Riot ist eine Mischung aus singen, schreien und sich übergeben.

Leo Unglaub
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge