Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
faecher:informatik:oberstufe:php:phppdo:start [26.04.2021 17:35] – [Prepared Statements] sbel | faecher:informatik:oberstufe:php:phppdo:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Zugriff auf Datenbanken mit PHP Data Objects (PDO) ====== | ||
- | ===== Verbindung aufbauen ===== | ||
- | |||
- | |||
- | Eine Verbindung zur Datenbank kann wie folgt aufgebaut werden: | ||
- | <code php> | ||
- | $pdo = new PDO(' | ||
- | </ | ||
- | |||
- | ===== Einfache Abfragen ===== | ||
- | |||
- | |||
- | Nachdem eine Verbindung zur Datenbank hergestellt wurde, können SQL Statements wie folgt ausgeführt werden: | ||
- | {{ auswahl_148.png|}} | ||
- | <code php> | ||
- | $sql = " | ||
- | $query_rows = $pdo-> | ||
- | |||
- | foreach ($query_rows as $row) { | ||
- | echo $row[' | ||
- | } | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Importiere die {{ schule500_sus_keys.zip |Tabellen der Schuldatenbank}} in deine Übungsdatenbank. | ||
- | |||
- | Frage die folgenden Infos in deinem PHP Skript ab und gib sie wenn sinnvoll in einer HTML-Tabelle aus: | ||
- | |||
- | * Erstelle eine Klassenliste der 7a | ||
- | * Erstelle eine Liste aller Schüler, die Salvador Dali als Betreuer haben. | ||
- | * Wieviele Schüler befinden sich in der Jahrgangsstufe 10? | ||
- | | ||
- | ===== Dynamische Abfragen ===== | ||
- | |||
- | Mit über Formulare kann man nun auch Eingaben des Benutzers in Abfragen einbauen, auf diese Weise werden die Abfragen dynamisch. | ||
- | <WRAP center | ||
- | Grundregel der Webentwicklung: | ||
- | </ | ||
- | |||
- | Eine <wrap hi> | ||
- | |||
- | <code php> | ||
- | // id wird in einem Formular vom Benutzer erfragt | ||
- | if(isset($_POST[' | ||
- | $id = $_POST[' | ||
- | } else { | ||
- | | ||
- | } | ||
- | |||
- | echo " | ||
- | $sql = " | ||
- | $rows = $pdo-> | ||
- | foreach ($rows as $row) { | ||
- | echo $row[' | ||
- | } | ||
- | </ | ||
- | |||
- | Dies funktioniert zwar, ist aber anfällig für sogenannte SQL Injections. Ein Angreifer kann über den POST-Parameter die SQL-Abfrage manipulieren und weiteren SQL-Code einschleusen. Im schlimmsten Fall werden dadurch sensible Daten ausgegeben, Tabelle verändert oder gar ganze Tabellen gelöscht. | ||
- | Gibt der Anwender nämlich ins Formularfeld beispielsweise folgendes ein: | ||
- | '' | ||
- | |||
- | Werden alle Datensätze ausgegeben, denn an die Datenbank wird die Abfrage '' | ||
- | |||
- | {{ : | ||
- | (Quelle: https:// | ||
- | |||
- | ===== Prepared Statements ===== | ||
- | |||
- | Um SQL-Injections zu unterbinden, | ||
- | |||
- | <code php> | ||
- | // id wird in einem Formular vom Benutzer erfragt | ||
- | if(isset($_POST[' | ||
- | $id = $_POST[' | ||
- | } else { | ||
- | | ||
- | } | ||
- | |||
- | echo " | ||
- | |||
- | $statement = $pdo-> | ||
- | $statement-> | ||
- | |||
- | foreach ($row = $statement-> | ||
- | echo $row[' | ||
- | } | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A2) === | ||
- | |||
- | Eine Vorlage für ein [[ faecher: | ||
- | |||
- | * Vollziehe die Beispiele oben nach, bestätige die SQL Injection. | ||
- | * Erweitere das Formular so, dass man mehrere Parameter der Abfrage dynamisiseren kann. Verwende prepared statements. | ||
- | * Mache Klassenlisten über ein Dropdown Formularfeld zugänglich (weitere Recherche nötig). | ||
- |