MySQL-PHP-Verbindung und -Verwendung
MySQL ist ein quelloffenes relationales Datenbankverwaltungssystem (RDBMS), das Structured Query Language (SQL) verwendet, um Daten zu verwalten und zu manipulieren.
PHP ist eine beliebte serverseitige Skriptsprache, die sich besonders für die Webentwicklung eignet.
Wenn MySQL und PHP zusammen verwendet werden, können Sie dynamische, datengesteuerte Websites erstellen.
PHP bietet mehrere Möglichkeiten, eine Verbindung zu MySQL-Datenbanken herzustellen und sie zu manipulieren. Sie könnenmysqli-Erweiterung (MySQL Improved) verwenden oderPDO(PHP Data Objects)。
Wenn Sie mehr über MySQL in PHP erfahren möchten, können Sie unsereEinführung in die Verwendung von MySQL in PHP besuchen.。
Verbindung zur MySQL-Datenbank herstellen
Verwendung der mysqli-Erweiterung
mysqli ("verbessertes MySQL") ist der empfohlene Weg, um in PHP eine Verbindung zu MySQL herzustellen. Nachfolgend ein einfaches Verbindungsbeispiel:
Beispiel
$servername = "localhost"; // Datenbankserveradresse
$username = "username"; // Datenbank-Benutzername
$password = "password"; // Datenbank-Passwort
$dbname = "database_name"; // Datenbankname
// Verbindung erstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung prüfen
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
echo "Verbindung erfolgreich";
?>
Verwendung von PDO (PHP Data Objects)
PDO bietet eine Datenzugriffs-Abstraktionsschicht, die mit verschiedenen Datenbanksystemen arbeiten kann:
Beispiel
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// PDO-Fehlermodus auf Exception setzen
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Verbindung erfolgreich";
}
catch(PDOException $e) {
echo "Verbindung fehlgeschlagen: " . $e->getMessage();
}
?>
SQL-Abfragen ausführen
Daten abfragen
Daten mit mysqli abfragen:
Beispiel
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Jede Datenzeile ausgeben
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - E-Mail: " . $row["email"]. "<br>";
}
} else {
echo "0 Ergebnisse";
}
Daten mit PDO abfragen:
Beispiel
$stmt->execute();
// Die Ergebnismenge auf ein assoziatives Array setzen
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach($stmt->fetchAll() as $row) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - E-Mail: " . $row["email"]. "<br>";
}
Daten einfügen
mysqli-Beispiel zum Einfügen von Daten:
Beispiel
if ($conn->query($sql) === TRUE) {
echo "Neuer Datensatz erfolgreich eingefügt";
} else {
echo "Fehler: " . $sql . "<br>" . $conn->error;
}
PDO-Beispiel zum Einfügen von Daten (sicherer Weg):
Beispiel
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
// Eine Zeile einfügen
$name = "John Doe";
$email = "[email protected]";
$stmt->execute();
Sicherheitsaspekte
SQL-Injection verhindern
SQL-Injection ist eine häufige Sicherheitsbedrohung. Um SQL-Injection zu verhindern, sollten Sie:
- Verwenden Sie Prepared Statements (wie im PDO-Beispiel oben)
- Benutzereingaben validieren und filtern
- Benutzereingaben nicht direkt in SQL-Abfragen verketten
Weitere Sicherheitspraktiken
- Wenden Sie das Prinzip der geringsten Rechte an: Datenbankbenutzer sollten nur die erforderlichen Berechtigungen haben
- Verschlüsseln Sie sensible Daten
- Sichern Sie die Datenbank regelmäßig
- Deaktivieren Sie die Fehleranzeige in Produktionsumgebungen
Die Datenbankverbindung schließen
Nach Abschluss der Datenbankoperationen sollten Sie die Verbindung schließen, um Ressourcen freizugeben:
mysqli-Verbindung schließen:
Beispiel
PDO-Verbindung schließen:
Beispiel
Praktische Anwendungsbeispiele
Benutzerregistrierungssystem
Beispiel
$conn = new mysqli("localhost", "username", "password", "user_db");
// Verbindung prüfen
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
// Formularübermittlung verarbeiten
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$email = $_POST['email'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT); // Das Passwort hashen
// Vorbereitete Anweisung zur Vermeidung von SQL-Injection
$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $email, $password);
if ($stmt->execute()) {
echo "Registrierung erfolgreich!";
} else {
echo "Fehler: " . $stmt->error;
}
$stmt->close();
}
$conn->close();
Benutzer-Login-System
Beispiel
$conn = new mysqli("localhost", "username", "password", "user_db");
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 1) {
$user = $result->fetch_assoc();
if (password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
} else {
echo "Ungültiges Passwort";
}
} else {
echo "Benutzer existiert nicht";
}
$stmt->close();
}
$conn->close();