Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Datenbankzugriff und SQL

Sicher und portabel mit der Datenbank arbeiten - eZDB, arrayQuery und query, Escaping und Typumwandlung, Transaktionen, die sechs unterstützten Datenbanksysteme und ihre Unterschiede und wann stattdessen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/creators/app-creators/database-access.md

On this page

This page is a translation. Read the English original

Datenbankzugriff und SQL

Diese Seite ist für Anwendungsentwickler, die SQL brauchen. Exponential läuft auf SQLite 3, PostgreSQL, MongoDB, MariaDB, Oracle und MySQL (Datenbankunterstützung), daher zählt portabler Code mehr als bei einem Produkt für nur ein Datenbanksystem. Bevorzugen Sie eZPersistentObject (Persistente Objekte und eigene Tabellen); verwenden Sie SQL für Berichte und Massenarbeit.

Inhalt

  1. Die Verbindung
  2. Lesen und schreiben
  3. Escaping
  4. Transaktionen
  5. Portables SQL schreiben

Die Verbindung

$db = eZDB::instance();

Die Instanz verwendet die [DatabaseSettings] des Siteaccess; eine Verbindung pro Anfrage (unter Velocity pro Worker).

Lesen und schreiben

$rows = $db->arrayQuery( 'SELECT id, title FROM expdemo_item WHERE user_id = ' . (int)$userID . ' ORDER BY created DESC',
                         array( 'offset' => 0, 'limit' => 20 ) );

$db->query( "UPDATE expdemo_item SET title = '" . $db->escapeString( $title ) . "' WHERE id = " . (int)$id );

arrayQuery() gibt ein Array von Zeilen (assoziativen Arrays) zurück; das zweite Argument nimmt offset und limit entgegen, die der Treiber in die Syntax des jeweiligen Systems übersetzt. query() gibt bei Anweisungen, die Daten ändern, true oder false zurück.

Escaping

WertVorgehen
Ganzzahlumwandeln: (int)$id
Zeichenkette$db->escapeString( $value ) innerhalb von Anführungszeichen
Liste von Ganzzahlenimplode( ',', array_map( 'intval', $ids ) )
Bezeichner (Tabelle, Spalte)nie aus Eingaben; aus einer Positivliste wählen

Bauen Sie SQL niemals ohne diese Maßnahmen aus Eingaben der Anfrage.

Transaktionen

$db->begin();
try
{
    // several writes
    $db->commit();
}
catch ( Exception $e )
{
    $db->rollback();
    throw $e;
}

Transaktionen lassen sich verschachteln: Nur das äußerste commit() schreibt. Unter SQLite warten schreibende Prozesse in einer Schlange auf die Schreibsperre; halten Sie Transaktionen kurz (SQLite-Transaktionen).

Portables SQL schreiben

  • Verwenden Sie Offset und Limit von arrayQuery(), nicht LIMIT in der Zeichenkette.
  • Vermeiden Sie systemspezifische Funktionen (IFNULL, GROUP_CONCAT, MOD()): Die Korrekturen von eztags für SQLite haben MOD() durch % ersetzt (eztags).
  • Verlassen Sie sich nicht auf SET @var := ... oder Zeichenketten mit mehreren Anweisungen.
  • MongoDB kennt keine Joins: Der Treiber des Kernels übersetzt gängige Anweisungen; für Ihre eigenen Tabellen sollten Sie eZPersistentObject bevorzugen, das jedes System unterstützt (MongoDB-Unterstützung).
  • Testen Sie auf SQLite und auf dem System der Produktivumgebung.
  • Der SQL-Abfrage-Cache kann Leseergebnisse cachen (querycache.ini) (SQL-Abfrage-Cache).

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x