In diesem Dreamcodes Tutorial zeigen wir Schritt für Schritt, wie man mit PHP auf eine MySQL-Datenbank zugreift, Daten abruft und übersichtlich ausgibt.
1. Verbindung zur MySQL-Datenbank herstellen
Bevor wir Daten abfragen können, müssen wir eine Verbindung zur Datenbank herstellen. Dazu nutzen wir in PHP meist die mysqli
-Erweiterung oder PDO. Beispiel mit mysqli
:
<?php
$servername = "localhost";
$username = "dein_benutzer";
$password = "dein_passwort";
$dbname = "deine_datenbank";
// Verbindung herstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Prüfen, ob die Verbindung erfolgreich war
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
echo "Verbindung erfolgreich!";
?>
Erklärung: mysqli
ist eine native PHP-Erweiterung, die den Zugriff auf MySQL-Datenbanken ermöglicht. Um die Verbindung flexibel zu gestalten, speichern wir die Verbindungsdaten wie Servername, Benutzername, Passwort und Datenbankname in Variablen, sodass sie bei Bedarf leicht angepasst werden können. Mit $conn->connect_error
überprüfen wir anschließend, ob die Verbindung erfolgreich hergestellt wurde, und geben im Fehlerfall eine entsprechende Meldung aus, um Probleme sofort erkennen zu können.
2. SQL-Abfrage formulieren
Nun definieren wir, welche Daten wir abrufen möchten. Angenommen, wir haben eine Tabelle users
mit den Spalten id
, name
und email
.
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);
Erklärung: Mit SELECT
legen wir fest, welche Spalten der Datenbanktabelle wir abrufen möchten. Anschließend führen wir die Abfrage mit $conn->query($sql)
aus und speichern das Ergebnis in der Variablen $result
, sodass wir später auf die zurückgegebenen Datensätze zugreifen und sie weiterverarbeiten können.
3. Daten ausgeben
Nun prüfen wir, ob die Abfrage Ergebnisse liefert, und geben sie aus:
if ($result->num_rows > 0) {
echo "<table border='1'>";
echo "<tr><th>ID</th><th>Name</th><th>Email</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>".$row["id"]."</td>";
echo "<td>".$row["name"]."</td>";
echo "<td>".$row["email"]."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "Keine Einträge gefunden.";
}
Erklärung: Mit $result->num_rows
ermitteln wir, wie viele Datensätze von der Datenbankabfrage zurückgegeben wurden. Anschließend nutzen wir fetch_assoc()
, um jeden einzelnen Datensatz als assoziatives Array abzurufen, wodurch sich die einzelnen Werte einfach weiterverarbeiten und ausgeben lassen. Die Daten werden schließlich in einer HTML-Tabelle dargestellt, sodass sie übersichtlich und gut lesbar für die Nutzer präsentiert werden.
4. Verbindung schließen
Am Ende sollten wir die Datenbankverbindung schließen:
$conn->close();
Warum wichtig:
Das Freigeben der Verbindung spart Ressourcen und verhindert unnötige Belastung des Datenbankservers.
5. Erweiterungen, Sicherheit und Druckbarkeit
Wenn du Daten aus MySQL abrufst und ausgibst, reicht es in der Praxis oft nicht, nur die Rohdaten darzustellen. Für eine professionelle Umsetzung solltest du folgende Aspekte berücksichtigen:
a) Fehlerbehandlung und stabile Abfragen
Statt nur die Basisabfrage zu nutzen, empfiehlt sich die Verwendung von PDO (PHP Data Objects) mit vorbereiteten Statements. Das hat mehrere Vorteile:
- Sicherheit: Verhindert SQL-Injection, da Eingaben nicht direkt in die SQL-Abfrage eingebunden werden.
- Flexibilität: PDO unterstützt verschiedene Datenbanktypen, sodass dein Code portabel bleibt.
- Fehlerkontrolle: Mit
try-catch
kannst du gezielt Fehler abfangen und aussagekräftige Meldungen ausgeben, ohne dass die Seite komplett abstürzt.
Beispiel für ein vorbereitetes Statement:
$stmt = $conn->prepare("SELECT id, name, email FROM users WHERE name LIKE ?");
$search = "%Müller%";
$stmt->bind_param("s", $search);
$stmt->execute();
$result = $stmt->get_result();
Hier kann der Nutzer gezielt nach bestimmten Namen suchen, ohne dass Sicherheitsrisiken entstehen.
b) Ausgabe formatieren und leserfreundlich gestalten
Die reine HTML-Tabelle ist funktional, wirkt aber wenig ansprechend. Mit CSS lässt sich die Tabelle deutlich übersichtlicher gestalten:
- Zebra-Streifen: Jede zweite Zeile in anderer Farbe für bessere Lesbarkeit.
- Hover-Effekt: Zeilen markieren beim Überfahren mit der Maus, um die Orientierung zu verbessern.
- Responsive Layout: Die Tabelle passt sich an verschiedene Bildschirmgrößen an, sodass sie auf Desktop, Tablet und Mobilgerät gut lesbar ist.
Beispiel-CSS:
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 10px;
text-align: left;
border: 1px solid #ddd;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
tr:hover {
background-color: #f1f1f1;
}
c) Druckfreundliche Ausgabe
Oft möchten Nutzer die Ergebnisse ausdrucken. Hierfür eignet sich eine Kombination aus CSS-Medienabfragen und JavaScript:
- Mit
@media print
kannst du eine separate Druckversion definieren, z. B. ohne Navigation, Werbung oder Buttons. - Mit
window.print()
in JavaScript lässt sich der Druck direkt auslösen.
Beispiel:
@media print {
body * {
visibility: hidden;
}
#druckbereich, #druckbereich * {
visibility: visible;
}
#druckbereich {
position: absolute;
left: 0;
top: 0;
width: 100%;
}
}
function druckeTabelle() {
window.print();
}
So kann der Nutzer nur den relevanten Bereich (z. B. die Tabelle mit den Daten) drucken, während andere Seitenelemente ausgeblendet werden.
d) Sortierung, Filter und Pagination
Für größere Datensätze lohnt es sich, interaktive Features einzubauen:
- Sortierung: Nutzer können die Tabelle nach Spalten sortieren (alphabetisch, numerisch).
- Filter: Suchfelder, um bestimmte Einträge schnell zu finden.
- Pagination: Große Tabellen auf mehrere Seiten aufteilen, um Ladezeiten und Übersichtlichkeit zu verbessern.
Diese Features lassen sich entweder mit PHP direkt umsetzen oder über JavaScript-Plugins wie DataTables elegant realisieren.
e) Sicherheit und Datenschutz
Gerade bei personenbezogenen Daten, wie etwa Namen oder E-Mail-Adressen, ist es besonders wichtig, den Datenschutz zu beachten. Sensible Informationen sollten niemals unverschlüsselt ausgegeben werden, und es sollten nur die Daten angezeigt werden, die für den jeweiligen Zweck wirklich notwendig sind. Zusätzlich ist es empfehlenswert, einen Hinweis auf die geltende Datenschutzerklärung einzufügen, um Transparenz gegenüber den Nutzern zu gewährleisten.