bg_image
header

Datenbanktrigger

Datenbank-Trigger (kurz: Trigger) sind spezielle automatische Aktionen in einer Datenbank, die ausgelöst werden, wenn bestimmte Ereignisse auf einer Tabelle oder Sicht (View) passieren.


🔧 Was macht ein Trigger?

Ein Trigger ist ein vordefinierter Code, der bei INSERT, UPDATE oder DELETE auf einer Tabelle automatisch ausgeführt wird – ohne dass der Benutzer ihn direkt aufruft.


🧠 Beispiel:

Stell dir vor, du hast eine Tabelle Bestellungen, und du willst, dass immer, wenn eine Bestellung gelöscht wird, diese Info in einer Tabelle Log gespeichert wird.

Dann schreibst du einen DELETE-Trigger für die Tabelle Bestellungen, der automatisch beim Löschen etwas in Log schreibt.


🔄 Arten von Triggern:

Typ Beschreibung
BEFORE Wird vor der Aktion ausgeführt
AFTER Wird nach der Aktion ausgeführt
INSTEAD OF (bei Views) ersetzt die Aktion komplett
CREATE TRIGGER log_delete
AFTER DELETE ON Bestellungen
FOR EACH ROW
BEGIN
  INSERT INTO Log (aktion, zeitpunkt)
  VALUES ('Bestellung gelöscht', NOW());
END;

✅ Wofür werden Trigger verwendet?

  • Validierung von Daten

  • Automatisches Logging

  • Business-Logik abbilden

  • Referentielle Integrität erweitern


⚠️ Nachteile:

  • Schwer zu debuggen

  • Können unbemerkt viele Aktionen auslösen

  • Beeinflussen Performance, wenn komplex


Prepared Statements

Ein Prepared Statement (auch vorbereitetes Statement genannt) ist eine Technik in der Programmierung, insbesondere bei der Arbeit mit Datenbanken, um SQL-Abfragen sicherer und effizienter auszuführen.

1. Was passiert bei einem Prepared Statement?

Ein Prepared Statement besteht aus zwei Schritten:

  1. Vorbereitung der SQL-Abfrage mit Platzhaltern
    Beispiel in SQL:

SELECT * FROM users WHERE username = ? AND password = ?
  • (In manchen Sprachen nutzt man auch :username oder andere Platzhalter)

  • Bindung der Parameter und Ausführung
    Die echten Werte werden später „gebunden“, z. B.:

$stmt->bind_param("ss", $username, $password);
$stmt->execute();

2. Vorteile

Sicherer vor SQL-Injection:
Benutzereingaben werden nicht direkt in die SQL eingebaut, sondern separat behandelt.

Schneller bei Wiederholungen:
Die SQL-Abfrage wird vom Datenbankserver einmal geparst und kann mehrfach effizient ausgeführt werden (z. B. bei Schleifen).

$conn = new mysqli("localhost", "user", "pass", "database");
$stmt = $conn->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email); // "s" für string
$email = "beispiel@example.com";
$stmt->execute();
$result = $stmt->get_result();

Kurz gesagt:

Ein Prepared Statement trennt SQL-Logik von Benutzereingaben und schützt so vor Sicherheitslücken wie SQL-Injection. Es ist eine Best Practice beim Umgang mit Datenbanken.


Outer Join

Ein Outer Join ist ein Begriff aus der Datenbankabfrage (meist in SQL) und bezeichnet eine spezielle Art, zwei Tabellen miteinander zu verknüpfen – auch dann, wenn keine passenden Datensätze in einer der Tabellen vorhanden sind.

Arten von Outer Joins:

  1. LEFT OUTER JOIN (oder einfach: LEFT JOIN):
    → Gibt alle Datensätze aus der linken Tabelle zurück, auch wenn es keine passenden Datensätze in der rechten Tabelle gibt.
    → Nicht passende Werte aus der rechten Tabelle werden mit NULL aufgefüllt.

  2. RIGHT OUTER JOIN (oder: RIGHT JOIN):
    → Gibt alle Datensätze aus der rechten Tabelle zurück, auch wenn es keine passenden in der linken gibt.
    → Nicht passende Werte aus der linken Tabelle werden mit NULL ergänzt.

  3. FULL OUTER JOIN:
    → Gibt alle Datensätze aus beiden Tabellen zurück.
    → Wo keine Übereinstimmung vorliegt, wird mit NULL ergänzt.


Beispiel:

Angenommen, du hast zwei Tabellen:

  • Kunden

    Kundennr Name
    1 Anna
    2 Bernd
    3 Clara
  • Bestellungen

    Bestellnr Kundennr Produkt
    101 2 Buch
    102 4 Lampe

LEFT JOIN (Kunden LEFT JOIN Bestellungen ON Kunden.Kundennr = Bestellungen.Kundennr)

Kundennr Name Bestellnr Produkt
1 Anna NULL NULL
2 Bernd 101 Buch
3 Clara NULL NULL

PHP Data Objects - PDO

PDO steht für PHP Data Objects und ist eine Datenbank-Abstraktionsschicht in PHP. Es handelt sich um eine objektorientierte Schnittstelle, mit der du auf verschiedene Datenbanken zugreifen kannst – z. B. MySQL, PostgreSQL, SQLiteohne den Datenbankspezifischen Code stark ändern zu müssen.

Hauptmerkmale von PDO:

Einheitliche API:
Egal ob MySQL, SQLite oder PostgreSQL – du benutzt denselben Code-Stil.

Prepared Statements:
Sicherer Schutz vor SQL-Injektionen durch gebundene Parameter:

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $userId]);

Transaktionen:
PDO unterstützt Transaktionen (wichtig z. B. bei Bankbuchungen).

Fehlerbehandlung per Exception:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Flexibler Datenbankwechsel:
Möchtest du von MySQL auf PostgreSQL wechseln? Meist nur der DSN-String und Treiber müssen geändert werden.

$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$user = 'root';
$pass = '';

try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Verbindung erfolgreich!";
} catch (PDOException $e) {
    echo "Verbindung fehlgeschlagen: " . $e->getMessage();
}

Fazit:

PDO ist der empfohlene Weg, um in modernen PHP-Anwendungen mit Datenbanken zu arbeiten – besonders wegen der Sicherheit und Flexibilität.


Data Control Language - DCL

Data Control Language (DCL) ist ein Teilbereich von SQL, der sich mit der Verwaltung von Zugriffsrechten und Berechtigungen in einer Datenbank beschäftigt. Mit DCL-Befehlen wird gesteuert, wer was in der Datenbank tun darf.

Die wichtigsten DCL-Befehle:

Befehl Beschreibung
GRANT Erteilt einem Benutzer Rechte, z. B. zum Lesen oder Ändern von Daten
REVOKE Entzieht einem Benutzer zuvor erteilte Rechte
GRANT SELECT, INSERT ON Kunden TO Benutzer123;
REVOKE INSERT ON Kunden FROM Benutzer123;

Typische Berechtigungen:

  • SELECT – Daten lesen

  • INSERT – Daten einfügen

  • UPDATE – Daten ändern

  • DELETE – Daten löschen

  • ALL – Alle Rechte

Merkmale:

  • DCL regelt Sicherheit und Zugriffskontrolle in der Datenbank.

  • Sie wird meist vom Datenbankadministrator (DBA) verwendet.

  • Die Rechte können auf Tabellenebene, Spaltenebene oder global vergeben werden.

  • Änderungen durch DCL-Befehle sind oft transaktionsabhängig und benötigen ggf. ein COMMIT.

Abgrenzung zu anderen SQL-Teilmengen:

  • DDL: Datenbankstruktur (z. B. Tabellen erstellen)

  • DML: Dateninhalte (z. B. Daten einfügen oder ändern)

  • TCL: Transaktionen steuern (z. B. COMMIT, ROLLBACK)

  • DCL: Rechte und Zugriffe verwalten


Data Query Language - DQL

DQL steht für Data Query Language und ist ein Teil der SQL-Sprache (Structured Query Language). Sie dient dazu, Daten aus einer Datenbank abzufragen, ohne sie zu verändern.

Hauptmerkmal von DQL:

  • Nur lesend: Mit DQL werden Daten abgefragt, aber nicht eingefügt, verändert oder gelöscht.

  • Der zentral verwendete Befehl ist:

SELECT

Beispiel:

SELECT name, geburtsdatum FROM kunden WHERE stadt = 'Berlin';

Dieser Befehl liest die Namen und Geburtsdaten aller Kunden aus, die in Berlin wohnen – verändert aber nichts an den Daten.


DQL im Vergleich zu anderen SQL-Teilen:

Teil Bedeutung Hauptfunktion
DQL Data Query Language Daten lesen
DML Data Manipulation Language Daten einfügen, ändern, löschen (INSERT, UPDATE, DELETE)
DDL Data Definition Language Tabellen und Strukturen definieren (CREATE, ALTER, DROP)
DCL Data Control Language Rechte vergeben (GRANT, REVOKE)
TCL Transaction Control Language Transaktionen steuern (COMMIT, ROLLBACK)

Entity Manager

Ein Entity Manager ist ein zentraler Bestandteil von ORM-Frameworks (Object-Relational Mapping), vor allem im Zusammenhang mit Java (JPA – Java Persistence API), aber auch in anderen Sprachen wie PHP (Doctrine ORM).

Hier ist eine verständliche Erklärung:


💡 Definition:

Ein Entity Manager ist eine Komponente, die sich um die Verwaltung von Datenbank-Entities (also Objekten/Datensätzen) kümmert. Er bildet die Schnittstelle zwischen der objektorientierten Welt des Codes und der relationalen Welt der Datenbank.


📦 Aufgaben eines Entity Managers:

  1. Persistieren (Speichern):

    • Speichert ein neues Objekt (Entity) in der Datenbank.

    • Beispiel: $entityManager->persist($user);

  2. Finden/Laden:

    • Holt ein Objekt anhand seiner ID oder anderer Kriterien.

    • Beispiel: $entityManager->find(User::class, 1);

  3. Aktualisieren:

    • Änderungen an einem Objekt werden verfolgt und in die Datenbank geschrieben (z. B. beim flush()).

  4. Entfernen/Löschen:

    • Löscht ein Objekt aus der Datenbank.

    • Beispiel: $entityManager->remove($user);

  5. Transaktionen verwalten:

    • Beginnt, commitet oder rollt Transaktionen zurück.

  6. Query-Handling:


🔁 Lebenszyklus von Entities:

Der Entity Manager verwaltet den „Zustand“ von Objekten:

  • managed (verfolgt Änderungen),

  • detached (nicht mehr verwaltet),

  • removed (zum Löschen markiert),

  • new (noch nicht gespeichert).


🛠 Beispiel mit Doctrine (PHP):

$user = new User();
$user->setName('Max Mustermann');

$entityManager->persist($user); // Zum Speichern vormerken
$entityManager->flush();        // Tatsächlich in DB schreiben

Fazit:

Der Entity Manager ist der zentrale Ansprechpartner, wenn es darum geht, mit Datenbankobjekten zu arbeiten – lesen, schreiben, ändern, löschen. Er abstrahiert die SQL-Ebene und macht die Datenbankarbeit objektorientiert steuerbar.


Doctrine Database Abstraction Layer - DBAL

Doctrine DBAL (Database Abstraction Layer) ist eine PHP-Bibliothek, die eine Abstraktionsschicht für den Datenbankzugriff bietet. Sie ist ein Teil von Doctrine, einem weit verbreiteten ORM-Projekt (Object-Relational Mapping), aber kann unabhängig vom ORM verwendet werden.

Ziel und Nutzen von Doctrine DBAL:

Doctrine DBAL bietet eine einheitliche API, um mit verschiedenen Datenbanken (wie MySQL, PostgreSQL, SQLite usw.) zu kommunizieren, ohne direkt SQL für die jeweilige Datenbank schreiben zu müssen.


Hauptfunktionen von Doctrine DBAL:

  • Verbindungsverwaltung:
    • Verbindungsaufbau zu Datenbanken über Konfigurationsarrays.

    • Unterstützung für Verbindungs-Pooling, Transaktionen usw.

  • SQL-Query-Builder:
    • Dynamisches Erstellen von SQL-Abfragen über eine objektorientierte API:

$qb = $conn->createQueryBuilder();
$qb->select('u.id', 'u.name')
   ->from('users', 'u')
   ->where('u.age > :age')
   ->setParameter('age', 18);
$stmt = $qb->executeQuery();
  • Datenbankunabhängigkeit:

    • Die gleichen Funktionen und Abfragen funktionieren mit verschiedenen DBMS, z. B. MySQL, PostgreSQL, SQLite.

  • Schema-Management:

    • Werkzeuge zum Erstellen, Ändern und Vergleichen von Datenbankschemata.

    • Nützlich für Migrationen.

  • Datentyp-Konvertierung:

    • Konvertiert Daten zwischen PHP und dem nativen Datenbankformat.

use Doctrine\DBAL\DriverManager;

$conn = DriverManager::getConnection([
    'dbname' => 'test',
    'user' => 'root',
    'password' => '',
    'host' => 'localhost',
    'driver' => 'pdo_mysql',
]);

$result = $conn->fetchAllAssociative('SELECT * FROM users');

Wann DBAL statt ORM?

Du verwendest DBAL ohne ORM, wenn:

  • Du mehr Kontrolle über SQL willst.

  • Dein Projekt keine komplexe Objekt-Mapping-Logik braucht.

  • Du bereits vorhandene SQL-Strukturen nutzen musst.


Fazit:

Doctrine DBAL ist ein mächtiges Werkzeug für sauberen, portablen und sicheren Datenbankzugriff in PHP, ohne sich auf ein vollständiges ORM einlassen zu müssen. Es liegt genau zwischen direktem PDO-Zugriff und einem vollwertigen ORM wie Doctrine ORM.

 


Kirby CMS

Kirby CMS ist ein flexibles, dateibasiertes Content-Management-System, das sich besonders für Entwickler und Designer eignet, die Wert auf maximale Kontrolle über ihre Projekte legen. Es wurde von Bastian Allgeier entwickelt und ist für seinen minimalistischen Ansatz und die hohe Anpassungsfähigkeit bekannt. Hier sind die wichtigsten Merkmale von Kirby CMS:

1. Dateibasiertes System

Kirby speichert Inhalte in einfachen Textdateien (meistens Markdown oder YAML), anstatt eine relationale Datenbank wie MySQL zu nutzen. Das macht es ideal für kleine bis mittelgroße Projekte, bei denen die Installation und Wartung einer Datenbank überflüssig ist.

2. Flexibilität

Kirby bietet keine vorgefertigten Themes, sondern gibt Entwicklern die Freiheit, Templates und Layouts vollständig selbst zu erstellen. Die Struktur basiert auf PHP, was Entwicklern ermöglicht, dynamische Websites nach ihren Vorstellungen zu gestalten.

3. Kirby Panel

Das Panel ist eine intuitive Benutzeroberfläche, über die Redakteure Inhalte bearbeiten können. Es bietet eine klare Struktur und kann individuell an die Anforderungen des Projekts angepasst werden, um eine benutzerfreundliche Erfahrung zu gewährleisten.

4. Entwicklerfreundlichkeit

Kirby ist besonders für Webentwickler attraktiv, da es:

  • Keine Vorgaben macht: Du entscheidest über die Struktur, das Design und die Funktionalität der Website.
  • API-zentriert: Eine eingebaute PHP- und REST-API ermöglicht es, Inhalte programmgesteuert zu verarbeiten und auszugeben.
  • Geringer Overhead: Es ist leichtgewichtig und hat keine unnötigen Funktionen, die die Website verlangsamen könnten.

5. Lizenzmodell

Kirby ist nicht kostenlos. Es bietet eine kostenfreie Testversion, aber für den produktiven Einsatz muss eine Lizenz erworben werden. Dies macht es besonders für professionelle Projekte interessant, da es ohne Abhängigkeit von Werbefinanzierung entwickelt wird.

6. Einsatzgebiete

Kirby eignet sich für:

  • Portfolio-Seiten
  • Blogs
  • Unternehmenswebsites
  • Dokumentationen
  • Individuelle Projekte, die keinen großen Ressourcenverbrauch benötigen

Fazit

Kirby CMS ist ideal für Projekte, bei denen maximale Flexibilität und Kontrolle gefragt sind. Es kombiniert eine einfache Inhaltsverwaltung mit leistungsstarker Entwicklerfreiheit, was es zu einem Favoriten für Designer und Entwickler macht, die von Grund auf eigene Websites erstellen möchten.

 


MariaDB

MariaDB ist ein relationales Datenbankmanagementsystem (RDBMS), das als Open-Source-Alternative zu MySQL entwickelt wurde. Es wurde 2009 von den ursprünglichen Entwicklern von MySQL ins Leben gerufen, nachdem MySQL von Oracle übernommen wurde. Ziel war es, eine vollständig offene und kompatible Version von MySQL bereitzustellen, die unabhängig bleibt.

Hauptmerkmale von MariaDB:

  1. Open Source:

    • MariaDB steht unter der GPL (General Public License), was garantiert, dass es kostenlos genutzt, modifiziert und verbreitet werden kann.
  2. Kompatibilität mit MySQL:

    • MariaDB ist weitgehend kompatibel mit MySQL. Viele Anwendungen, die MySQL nutzen, können direkt auf MariaDB umgestellt werden, ohne großen Anpassungsaufwand.
    • Die gleiche Befehlssyntax, APIs und Konfigurationsdateien werden verwendet.
  3. Erweiterte Funktionen:

    • Neue Speicher-Engines: MariaDB bietet zusätzliche Speicher-Engines wie Aria, TokuDB und ColumnStore.
    • Bessere Performance: Optimierungen für Abfragen und Indexierungen sorgen für eine höhere Geschwindigkeit und Skalierbarkeit.
    • Verschlüsselung: Verbesserte Sicherheitsfeatures, wie Verschlüsselung auf Tabellen- und Spaltenebene.
    • JSON- und Virtuelle Spalten: Unterstützt moderne Datentypen für flexible Anwendungen.
  4. Aktive Weiterentwicklung:

    • MariaDB wird von der Community und der MariaDB Foundation aktiv weiterentwickelt, wodurch regelmäßig neue Funktionen und Verbesserungen eingeführt werden.

Typische Einsatzgebiete:

  • Webanwendungen: Zum Beispiel Content-Management-Systeme (CMS) wie WordPress.
  • Unternehmenslösungen: Für ERP-, CRM- oder Data-Warehouse-Anwendungen.
  • Cloud-Dienste: Viele Cloud-Provider unterstützen MariaDB.

Unterschied zu MySQL:

  • Während MySQL unter Oracles Leitung teilweise proprietäre Erweiterungen bietet, bleibt MariaDB vollständig Open Source.
  • MariaDB bietet zusätzliche Funktionen und ist für Nutzer interessant, die vollständige Kontrolle über ihre Datenbank behalten möchten.

Fazit:

MariaDB ist eine leistungsstarke und flexible Datenbanklösung, die vor allem wegen ihrer Offenheit, Sicherheit und Kompatibilität mit MySQL in der Entwickler-Community sehr geschätzt wird.