|
| | __construct () |
| | Initialisiert das DBX-Datenbankobjekt mit Standardwerten und lädt den zentralen Validator.
|
| | __destruct () |
| | Gibt interne Referenzen beim Zerstören des Objekts frei.
|
| | is_sqlite_database_locked ($database_path) |
| | Prüft, ob eine SQLite-Datenbank aktuell gelockt ist.
|
| | db_connect ($server, $db_type, $db_host, $db_name='', $db_user='', $db_pass='', $db_port='') |
| | Stellt eine Verbindung zu einer Datenbank her und speichert sie in $this->db[$server].
|
| | get_dd_table ($dd, $rec=0) |
| | Gibt den Tabellennamen oder die komplette Table-Definition einer DD zurück.
|
| | get_dd_autosync ($dd, $rec=0) |
| | Gibt das Autosync-Flag einer DD zurück.
|
| | get_new_record (string $dd, array $field_values=[]) |
| | Erstellt einen neuen Datensatz mit Standardwerten.
|
| | insert ($dd, $field_values, $verify_access=1, $verify_fields=1, $verify_values=1, $trace=1) |
| | Fügt einen neuen Datensatz in die Datenbank ein.
|
| | update ($dd, $field_values, $where, $verify_access=1, $verify_fields=1, $verify_values=1, $trace=1) |
| | Führt ein UPDATE-Statement auf einer Tabelle aus.
|
| | save ($dd, $field_values, $where, $verify_access=1, $verify_fields=1, $verify_values=1, $trace=1) |
| | Speichert einen Datensatz mit UPSERT-ähnlichem Verhalten.
|
| | delete ($dd, $where, $verify_access=1, $trace=1) |
| | Löscht Datensätze aus einer Tabelle anhand einer WHERE-Bedingung.
|
| | empty ($dd) |
| | Leert eine Tabelle anhand ihrer DD.
|
| | get_table_exist ($dd, $dbtab='', bool $report_missing=true) |
| | Prüft, ob eine Tabelle existiert.
|
| | get_convert_array ($field, $array, $convert='auto') |
| | Konvertiert Array-Werte automatisch in String-/Serialisierungsformate.
|
| | check_access (string $mode, string $dd) |
| | Prüft die Zugriffsrechte für eine Operation auf einer DD.
|
| | check_values ($dd, $field_values, $verify_values=1) |
| | Überprüft und validiert übergebene Feldwerte anhand der DD-Regeln.
|
| | check_fields ($dd, $field_values) |
| | Filtert ungültige Felder aus einem Eingabearray heraus.
|
| | empty_record (string $dd) |
| | Erstellt einen leeren Datensatz mit Standardwerten basierend auf der DD.
|
| | check_where ($where, $owner=0, $dd='') |
Zentrale Datenbank-, DD-, CRUD-, Rechte- und Validierungsschicht von dbxapp.
Zentrale Datenbank- und DD-Systemklasse von DBX.
Zweck
Diese Klasse ist die zentrale Infrastruktur für:
- Datenbankverbindungen
- DD-Auflösung und DD-Cache
- Tabellen-/Feld-/Server-Metadaten
- CRUD-Operationen
- Access-Prüfung
- Feld-/Wert-Validierung
- Trace-/Audit-Schreibung
- Hilfsfunktionen für Report/Grid/Tabellen-Metadaten
Architekturprinzip
- DDs bleiben die fachliche Quelle für Tabellen, Felder, Rechte und Defaults.
- DB-Verbindungen werden lazy aufgebaut und wiederverwendet.
- Bestehende DBX-Mechaniken werden genutzt, nicht parallel neu erfunden.
- Änderungen in dieser Klasse müssen minimal, stabil und systemkonform bleiben.
DD-Konzept
DD-Dateien liegen unter: dbx/modules/{modul}/dd/*.dd.php
Eine DD definiert typischerweise:
- $table
- optional $fields
- optional $indexes
Unterstützte DD-Aufrufe
- meinDD
- meinModul|meinDD
- modul|meinDD (modul = Platzhalter für aktives Modul)
Beispiel
$db =
dbx()->get_system_obj(
'dbxDB');
$rows =
$db->select(
'kunden',
"status='aktiv'");
$rec =
$db->select1(
'crm|adresse', 15);
$ok =
$db->insert(
'kunden', [
'name' => 'Muster GmbH',
'city' => 'Darmstadt'
]);
$id = $ok > 0 ?
$db->get_insert_id() : 0;
$ok =
$db->update(
'kunden', [
'city' => 'Frankfurt'
], 15);
$ok =
$db->save(
'kunden', [
'name' => 'Test'
], 15);
$db
Definition dbxDB.class.php:86
$id
Definition dbxki_get_page.php:23
$rows
Definition list_active_de_pages.php:27
Verwaltet Datenbankschemata und Schemaabgleiche in der Administration.
| dbxDB::db_connect |
( |
| $server, |
|
|
| $db_type, |
|
|
| $db_host, |
|
|
| $db_name = '', |
|
|
| $db_user = '', |
|
|
| $db_pass = '', |
|
|
| $db_port = '' ) |
Stellt eine Verbindung zu einer Datenbank her und speichert sie in $this->db[$server].
Unterstützte Datenbanktypen
sqlite, mysql, pgsql, sqlsrv, oci, firebird, cubrid, dblib, ibm, informix, odbc.
Stabilitätsregel
Bei unbekanntem Datenbanktyp wird sauber ein Fehler gesetzt und protokolliert, ohne unkontrolliert nach außen abzubrechen.
- Parameter
-
| string | $server | Name des Servers (Schlüssel im $this->db-Array) |
| string | $db_type | Typ der Datenbank |
| string | $db_host | Hostname oder Datei für SQLite |
| string | $db_name | Name der Datenbank |
| string | $db_user | Benutzername |
| string | $db_pass | Passwort |
| string | $db_port | Port |
- Rückgabe
- int 1 bei Erfolg, 0 bei Fehler
| dbxDB::insert |
( |
| $dd, |
|
|
| $field_values, |
|
|
| $verify_access = 1, |
|
|
| $verify_fields = 1, |
|
|
| $verify_values = 1, |
|
|
| $trace = 1 ) |
Fügt einen neuen Datensatz in die Datenbank ein.
Ablauf
- Optional: Setzt System-/Audit-Felder
- Ergänzt Standardwerte
- Prüft Zugriff
- Validiert Felder und Werte
- Führt INSERT aus
- Optional: Schreibt Trace-Eintrag
Bei retry-fähigen Lock-/Deadlock-Fehlern wird außerhalb aktiver Transaktionen mehrfach erneut versucht.
- Parameter
-
| string | $dd | Datenbank-Definition |
| array | $field_values | Zu speichernde Werte |
| int | $verify_access | Zugriff prüfen |
| int | $verify_fields | Felder prüfen |
| int | $verify_values | Werte prüfen |
| int | $trace | Trace aktivieren |
Beispiel:
$ok =
$db->insert(
'dbxUser', [
'name' => 'Admin',
'email' => 'admin@example.test'
]);
$rid = $ok > 0 ?
$db->get_insert_id() : 0;
- Rückgabe
- int 1 = Erfolg (Insert-ID separat über get_insert_id()), 0 = Validierungsfehler, -1 = Zugriffsfehler, -2 = DB-Fehler
Benutzt $fields, $id, check_access(), check_fields(), check_values(), empty(), get_dd_table(), get_new_record() und insert().
Wird benutzt von delete(), insert(), save() und update().
| dbxDB::update |
( |
| $dd, |
|
|
| $field_values, |
|
|
| $where, |
|
|
| $verify_access = 1, |
|
|
| $verify_fields = 1, |
|
|
| $verify_values = 1, |
|
|
| $trace = 1 ) |
Führt ein UPDATE-Statement auf einer Tabelle aus.
Bei retry-fähigen Lock-/Deadlock-Fehlern wird außerhalb aktiver Transaktionen mehrfach erneut versucht.
Ablauf
- Access prüfen
- WHERE normalisieren
- optional Before-Rows für Trace laden
- Felder/Werte prüfen
- UPDATE ausführen
- Delta-basiert Trace schreiben
- Parameter
-
| string | $dd | Datenbankdefinition oder Tabellenname |
| array | $field_values | Zu aktualisierende Werte |
| string | $where | WHERE-Bedingung |
| int | $verify_access | Zugriff prüfen |
| int | $verify_fields | Felder prüfen |
| int | $verify_values | Werte prüfen |
| int | $trace | Trace aktivieren |
Beispiel:
$ok =
$db->update(
'dbxUser', [
'active' => 1], 15);
- Rückgabe
- int 1 = geändert, 0 = nichts geändert, -1 = Zugriff, -2 = DB-Fehler
Benutzt $count, $field, $id, $row, check_access(), check_fields(), check_values(), empty(), get_convert_array(), get_dd_table() und insert().
Wird benutzt von save().