Zum Inhalt

Datenbank-Zugriff

Verbindung über WebEdition

Der Datenbankzugriff in portierten und neu geschriebenen Skripten erfolgt über die WebEdition-interne Datenbankklasse:

$db = new DB_WE();
$result = $db->query($query);
$row = mysqli_fetch_assoc($result);

Vorteile:

  • Keine eigene Verbindungskonfiguration nötig
  • Authentifizierung übernimmt WebEdition
  • Kein separater Kontext, keine Mehrfachverbindungen
  • Standard-mysqli-Schnittstelle – alle gängigen Funktionen verfügbar

Übergabe der Datenbankverbindung

mysqli-Funktionen benötigen die Datenbankverbindung explizit als Parameter. In portierten Skripten wird $db deshalb konsequent durchgereicht:

getUntervermittlerString($id, $db);

Das war notwendig, weil die alte PHP-5-mysql-Schnittstelle auf einer statischen Verbindung arbeitete und keine explizite Übergabe forderte.

Hilfsfunktionen mit $db

Einige Helfer-Funktionen benötigen die Verbindung ebenfalls:

mysqli_real_escape_string($db, $eingabe);
mysqli_query($db, $query);
mysqli_fetch_assoc($result);  // kein $db nötig

Referenzimplementierung (Ramón Dollase)

Beispiel für einen beliebigen SQL-Aufruf im WebEdition-Kontext – z. B. für Anfangsbuchstaben-Navigation einer Objektliste:

$db = new DB_WE();
$query = "SELECT LEFT(input_beruf, 1) AS Letter FROM `tblObject_3` GROUP BY Letter";
$result = $db->query($query);

while ($row = mysqli_fetch_assoc($result)) {
    $pos = stristr($erlaubteZeichen, $row['Letter']);
    if ($pos !== false) {
        echo "<li><a href='" . $_SERVER["PHP_SELF"] . "?start=" . $row['Letter'] . "'";
        if ($row['Letter'] == $_SESSION['startLetter']) {
            echo " class='current'";
        }
        echo ">" . $row['Letter'] . "</a></li>";
    }
}

Dieses Muster funktioniert in jedem PHP-Skript im WebEdition-Kontext: DB_WE instanziieren → Query absetzen → Ergebnis per mysqli_fetch_assoc() verarbeiten.

Zwei Datenbank-Kontexte

Kontext Zugriff
WebEdition-interne Tabellen (Seiten, Objekte, Nutzer) Framework-intern, über Templateengine (<we:listview>) oder $db aus DB_WE
Extranetportal-Tabellen (Vermittler, Verträge, Dokumente) Direkter Zugriff über $db mit rohen SQL-Queries

Beide liegen in derselben Datenbankinstanz – ein Join über beide Kontexte ist möglich.

ListView vs. direkter Zugriff

Das WebEdition-eigene <we:listview>-Tag unterstützt direkte SQL-Queries im Template. Einschränkung: Bestimmte WebEdition-Funktionalität (z. B. <we:field>-Tags auf den Ergebniszeilen) funktioniert nur, wenn listview echte WebEdition-Objekte liefert.

Für reine Datenbankzugriffe mit beliebigen SQL-Queries ist der direkte Weg über $db->query() flexibler und näher am Standard-PHP.

Absicherung

Alle dynamischen Parameter müssen vor dem Einsatz in SQL-Queries escaped werden:

$user = mysqli_real_escape_string($db, $_POST['user']);
$query = "SELECT * FROM benutzer WHERE login = '$user'";

Für neu geschriebene Module bevorzugt Prepared Statements einsetzen:

$stmt = $db->prepare("SELECT * FROM benutzer WHERE login = ?");
$stmt->bind_param('s', $_POST['user']);
$stmt->execute();