10. Unterrichtsblock

Datenbanken Grundlagen

Unterschied zwischen SQL und MySQL

SQL ist eine Datenbank-Abfrage-Sprache. Man speichert Daten in einer Datenbank und mit SQL kann man Daten selektieren, neue Daten eintragen, vorhandene Daten aktualisieren oder löschen. MySQL bietet die Möglichkeit, mittels PHP, SQL-Abfragen (Queries) auszuführen.

Unterschied zwischen MySQL & MariaDB

Beides sind Programme für das Datenbankmanagement. MariaDB eignet sich aufgrund der Performance für größere Datenbankprojekte. Hauptunterschiede siehe Quelle: https://www.opc-router.de/was-ist-mariadb-ein-vergleich-mit-mysql/

MySQL Datenbanken

Mit PHP kann man eine Verbindung zu Datenbanken herstellen und diese bearbeiten. MySQL ist das meist genutzte Datenbanksystem, in Bezug auf PHP.

Was ist MySQL?

  • MySQL ist ein Datenbanksystem, das im Web verwendet wird
  • MySQL ist ein Datenbanksystem, das auf einem Server läuft
  • MySQL eignet sich sowohl für kleine als auch für große Anwendungen
  • MySQL ist sehr schnell, zuverlässig und einfach zu bedienen
  • MySQL verwendet Standard-SQL
  • MySQL lässt sich auf einer Reihe von Plattformen kompilieren
  • MySQL kann kostenlos heruntergeladen und verwendet werden
  • MySQL wird von der Oracle Corporation entwickelt, vertrieben und unterstützt
  • MySQL ist nach der Tochter des Mitbegründers Monty Widenius benannt: My

Die Daten in einer MySQL-Datenbank werden in Tabellen gespeichert. Eine Tabelle ist eine Sammlung zusammengehöriger Daten und besteht aus Spalten und Zeilen.

Datenbanken sind nützlich, um Informationen kategorisch zu speichern. Ein Unternehmen verfügt möglicherweise über eine Datenbank mit den folgenden Tabellen:

  • Mitarbeiter
  • Produkte
  • Kunden
  • Aufträge

PHP + MySQL-Datenbanksystem

PHP in Kombination mit MySQL ist plattformübergreifend (Man kann es unter Windows entwickeln und auf einer Unix-Plattform bereitstellen)

Datenbankabfragen

Man kann eine Datenbank nach bestimmten Informationen abfragen und einen Datensatz zurückgeben.

Beispiel einer Abfrage an (unter Verwendung von Standard-SQL):

SELECT NachName FROM Mitarbeiter

Die obige Abfrage wählt alle Daten in der Spalte „NachName“ aus der Tabelle „Mitarbeiter“ aus.

MySQL Verbindung

PHP 5 und höher können mit einer MySQL-Datenbank arbeiten unter Verwendung von:

  • MySQLi-Erweiterung (das „i“ steht für „improved“ = verbessert)
  • PDO (PHP-Datenobjekte)

Frühere Versionen von PHP verwendeten die MySQL-Erweiterung. Diese Erweiterung wurde jedoch im Jahr 2012 eingestellt.

Sollte man MySQLi oder PDO verwenden?

Sowohl MySQLi als auch PDO haben ihre Vorteile:

PDO funktioniert auf 12 verschiedenen Datenbanksystemen, während MySQLi nur mit MySQL-Datenbanken funktioniert.

Wenn man also sein Projekt auf die Verwendung einer anderen Datenbank umstellen müssen, vereinfacht PDO den Vorgang. Man muss lediglich die Verbindungszeichenfolge und einige Abfragen ändern. Bei MySQLi muss man den gesamten Code neu schreiben – einschließlich der Abfragen.

  • Beide sind objektorientiert, MySQLi bietet jedoch auch eine prozedurale API.
  • Beide unterstützen Prepared Statements. Vorbereitete Anweisungen schützen vor SQL-Injection und sind für die Sicherheit von Webanwendungen sehr wichtig.

MySQL-Beispiele in MySQLi- und PDO-Syntax

In diesem und den folgenden Kapiteln zeigen wir drei Möglichkeiten, mit PHP und MySQL zu arbeiten:

  • MySQLi (objektorientiert)
  • MySQLi (prozedural)
  • PDO

Verbindungsaufbau zu MySQL

Bevor wir auf Daten in der MySQL-Datenbank zugreifen können, müssen wir eine Verbindung zum Server herstellen können:

Beispiel (MySQLi objektorientiert)

<?php
$servername = "localhost";
$nutzername = "nutzername";
$passwort = "hallo";

// Verbindungsaufbau
$conn = new mysqli($servername, $nutzername, $passwort);

// Verbindungsprüfung
if ($conn->connect_error) {
  die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
echo "Verbindung erfolgreich";
?>

Hinweis zum objektorientierten Beispiel oben:

$connect_error war bis PHP 5.2.9 und 5.3.0 fehlerhaft. Wenn man die Kompatibilität mit PHP-Versionen vor 5.2.9 und 5.3.0 sicherstellen muss, verwendet Sie stattdessen den folgenden Code:

// Verbindung prüfen
if (mysqli_connect_error()) {
  die("Datenbankverbindung fehlgeschlagen: " . mysqli_connect_error());
}

Beispiel (MySQLi prozedural)

<?php
$servername = "localhost";
$nutzername = "nutzername";
$passwort = "hallo";

// Verbindungsaufbau
$conn = mysqli_connect($servername, $nutzername, $passwort);

// Verbindungsprüfung
if (!$conn) {
  die("Verbindung fehlgeschlagen: " . mysqli_connect_error());
}
echo "Verbindung erfolgreich";
?>

Beispiel (PDO)

<?php
$servername = "localhost";
$nutzername = "nutzername";
$passwort = "hallo";

try {
  $conn = new PDO("mysql:host=$servername;dbname=phpmyadmin", $nutzername, $passwort);
  // Setzt den PDO-Fehlermodus auf Ausnahme
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Verbindung erfolgreich";
} catch(PDOException $e) {
  echo "Verbindung fehlgeschlagen: " . $e->getMessage();
}
?> 

Hinweis: Im obigen PDO-Beispiel haben wir auch eine Datenbank (myDB) angegeben . Für PDO ist eine gültige Datenbank erforderlich, um eine Verbindung herzustellen. Wenn keine Datenbank angegeben ist, wird eine Ausnahme ausgelöst.

Tipp: Ein großer Vorteil von PDO besteht darin, dass es über eine Ausnahmeklasse verfügt, um alle Probleme zu behandeln, die bei unseren Datenbankabfragen auftreten können. Wenn innerhalb des try{ }-Blocks eine Ausnahme ausgelöst wird, stoppt die Ausführung des Skripts und geht direkt zum ersten catch(){ }-Block über.


Schließen einer Verbindung

Die Verbindung wird automatisch geschlossen, wenn das Skript endet. Um die Verbindung vorher zu schließen, verwenden Sie Folgendes:

MySQLi objektorientiert:

$conn->close();

MySQLi prozedural:

mysqli_close($conn);

PDO:

$conn = null;

Aufgabe

  1. Öffne localhost/phpmyadmin und mache dich mit der Oberfläche vertraut
  2. Baue eine Datei mit jeweils einem Eingabeformular für den Nutzer, das Passwort und die Datenbank sowie einem Schalter zum Auslösen der Verbindung
  3. Verwende o.g. Codes um eine Verbindung herzustellen

Erstellen einer Datenbank

Eine Datenbank besteht aus einer oder mehreren Tabellen. Zum Erstellen oder Löschen einer MySQL-Datenbank benötigt man eine spezielle CREATE-Berechtigungen.

Erstellen einer MySQL-Datenbank mit MySQLi und PDO

Die CREATE DATABASE-Anweisung wird zum Erstellen einer Datenbank in MySQL verwendet. Die folgenden Beispiele erstellen eine Datenbank mit dem Namen „meineDB“:

Beispiel (MySQLi objektorientiert)

<?php
$servername = "localhost";
$nutzername = "nutzername";
$passwort = "hallo";

// Verbindungsaufbau
$conn = new mysqli($servername, $nutzername, $passwort);

// Verbindungsprüfung
if ($conn->connect_error) {
  die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}

// Erstellung einer Datenbank
$sql = "CREATE DATABASE meineDB_obj";
if ($conn->query($sql) === TRUE) {
  echo "Datenbank erfolgreich erstellt";
} else {
  echo "Fehler bei der Erstellung einer Datenbank: " . $conn->error;
}

$conn->close();

?>

Hinweis: Wenn man eine neue Datenbank erstellt, muss man nur die ersten drei Argumente für das MySQLi-Objekt angeben (Servername, Benutzername und Passwort).

Tipp: Wenn man einen bestimmten Port verwenden muss, fügt man eine leere Zeichenfolge für das Argument „Datenbankname“ hinzu, etwa so: new mysqli(„localhost“, „nutzername“, „passwort“, „“, port)

Beispiel (MySQLi prozedural

<?php
$servername = "localhost";
$nutzername = "nutzername";
$passwort = "hallo";

// Verbindungsaufbau
$conn = mysqli_connect($servername, $nutzername, $passwort);

// Verbindungsprüfung
if (!$conn) {
  die("Verbindung fehlgeschlagen: " . mysqli_connect_error());
}

// Datenbank erstellen
$sql = "CREATE DATABASE meineDB_prozedural";
if (mysqli_query($conn, $sql)) {
  echo "Datenbank erfolgreich erstellt";
} else {
  echo "Fehler beim Erstellen der Datenbank: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

Hinweis: Das folgende PDO-Beispiel erstellt eine Datenbank mit dem Namen „meineDBPDO“:

Beispiel (PDO)

<?php
$servername = "localhost";
$nutzername = "nutzername";
$passwort = "hallo";

try {
  $conn = new PDO("mysql:host=$servername;dbname=phpmyadmin", $nutzername, $passwort);
  // Setzt den PDO-Fehlermodus auf Ausnahme
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "CREATE DATABASE meineDBPDO";
  // Verwendet exec() weil keine Ergebnisse zurückgegeben werden
  $conn->exec($sql);
  echo "Datenbank erfolgreich erstellt<br>";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>

Tipp: Ein großer Vorteil von PDO besteht darin, dass es über eine Ausnahmeklasse verfügt, um alle Probleme zu behandeln, die bei unseren Datenbankabfragen auftreten können. Wenn innerhalb des try{ }-Blocks eine Ausnahme ausgelöst wird, stoppt die Ausführung des Skripts und geht direkt zum ersten Catch(){ }-Block über. Im Catch-Block oben geben wir die SQL-Anweisung und die generierte Fehlermeldung wieder.

Aufgabe

Baue ein weiteres Formular-Eingabefeld für einen Datenbanknamen in die Datei ein
Bei Absenden des Formulars soll dann eine Datenbank mit diesem Namen erstellt werden

Übungsaufgaben

Baue ein weiteres Eingabefeld, welches bei Absenden des Formulars eine Tabelle erzeugt

Dateien aus Unterricht

https://webentwicklerkurs.de/wp-content/uploads/2023/06/Unterrichtsstd_10.zip