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

<?php
$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

<?php
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

$sql = "SELECT id, name, email FROM users";
$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 = $conn->prepare("SELECT id, name, email FROM users");
$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

$sql = "INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')";

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 = $conn->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$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:

  1. Verwenden Sie Prepared Statements (wie im PDO-Beispiel oben)
  2. Benutzereingaben validieren und filtern
  3. 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

$conn->close();

PDO-Verbindung schließen:

Beispiel

$conn = null;

Praktische Anwendungsbeispiele

Benutzerregistrierungssystem

Beispiel

// Verbindung zur Datenbank herstellen
$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

session_start();
$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();
Andere Erweiterungen