Datenbank-Zugriff¶
Verbindung über WebEdition¶
Der Datenbankzugriff in portierten und neu geschriebenen Skripten erfolgt über die WebEdition-interne Datenbankklasse:
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:
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: