Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Datenbanken und PHP Grundkurs

Prepared Statements

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Prepared Statements sind das Mittel der Wahl bei der Arbeit mit Datenbankmanagementsystemen. Sie können dabei auch benannte Parameter einsetzen.

Transkript

Wenn Sie bei Datenbankoperationen Input von Benutzern einsetzen, besteht immer die Gefahr der Manipulation, das heißt, dass der Benutzer nicht nur Text, sondern auch selbst sql-Befehle eingibt. Abhilfe besteht im Einsatz von Prepared Statements. Ein Beispiel, wo es problematisch sein kann, ist folgender Fall: Sie verwenden "$_POST("name")", das kommt aus einem Formular, und Sie erwarten, dass irgendein Wert eingegeben wird, aber stattdessen kommt nach dem Wert ein einfaches Anführungszeichen, und es kommen zusätzliche mysql-Befehle. Sehen wir uns an, wie diese Prepared Statements bei PDO funktionieren. Ich habe ein INSERT, und wo ich die Werte eintragen möchte, schreibe ich Fragezeichen. Dann rufe ich auf "prepare", damit ist das vorbereitet, und das gibt mir ein Statementobjekt zurück, und auf das wende ich dann "execute" an. Diesem "execute" übergebe ich ein Array mit den Sachen, die eingetragen werden sollen. Also hier Bratlinge, Bratlinge aus roten Bohnen, und die Kategorie, also das sind diese Sachen, die eingetragen werden. Sehen wir uns an, ob das alles klappt. Und wir erhalten die Meldung, ein Datensatz, Datensätze betroffen, es hat funktioniert. Im Beispiel habe ich an dieser Stelle Fragezeichen eingesetzt, das wird natürlich schnell unübersichtlich, wenn ich mehr Parameter habe, und dann ist es praktisch, dass Sie diese Parameter auch benennen können. Das habe ich in diesem Fall gemacht, das heißt, anstelle der Fragezeichen vergebe ich Namen für die einzelnen Parameter, und die beginnen mit einem Doppelpunkt. Und wenn ich dann "execute" aufrufe vorher habe ich "execute" mit einem einfachen Array, also einem indizierten Array aufgerufen, jetzt verwende ich an dieser Stelle ein assoziatives Array, wo ich immer Schlüssel-Wertpaare angebe, und so die oben vergebenen Namen mit den einzelnen Werten versehe. Testen wir das auch aus. Und wiederum hat alles geklappt. Genauso können Sie natürlich auch mit "select" arbeiten. Ich lasse mir jetzt Gerichte ausgeben zu einer bestimmten Kategorie, habe das so benannt, "kategorie_id", ich benenne es genauso, wie die Spalte in der Datenbank heißt, aber das wäre nicht unbedingt notwendig, macht es aber übersichtlicher. Wieder rufe ich dann "prepare" auf, und "execute", und übergebe ein Array, in diesem Fall nur mit einem Schlüsselwertpaar. Sehen wir uns das an: Wir lassen das alles ausgeben, und erhalten immer die Gerichte mit der Kategorie-ID 4. Wir können die Daten auch mit "bindValue" binden, das ist beispielsweise praktisch, wenn wir dieselbe Abfrage mit unterschiedlichen Angaben durchführen wollen. Das sehen Sie jetzt hier, da verwende ich "bindValue", und einmal soll die Kategorie-ID 4 sein. Dann führe ich das Ganze aus, und dann gibt es noch einen zweiten Durchlauf, und dieses Mal gebe ich bei "bindValue" die Kategorie-ID 2 an. Sehen wir uns das an: Und das funktioniert, also hier haben wir alle Gerichte mit der Kategorie-ID 4, und dann führe ich es nochmal aus, und dieses Mal ist die Kategorie-ID 2. Neben "bindValue" gibt es auch "bindParam". Was ist der Unterschied? Bei "bindValue" werden die Angaben per Wert übergeben, das können Sie für Variablen oder Literale nehmen, bei "bindParam" werden die per Referenz übergeben, das können Sie nur bei Variablen einsetzen. Es gibt jetzt noch einen weiteren Unterschied, den wollen wir uns einmal anschauen. Beginnen wir einmal damit, dass wir "bindValue" einsetzen. Folgende Situation: Wir wollen Gerichte einer bestimmten Kategorie, die Kategorie habe ich in dieser Variablen gespeichert, dann verwende ich "bindValue", und weise diese Kategorie zu, und bevor ich "execute" aufrufe, vergebe ich einen anderen Wert für diese Variable, nämlich 2. Wenn wir "bindValue" einsetzen, erhalten wir alle Gerichte der Kategorie 4. Sehen wir uns das einmal an, genau, 4. Das ist anders, wenn wir "bindParam" einsetzen, dann wird die Variable als Referenz gebunden, und erst ausgewertet, wenn "execute" aufgerufen wird, und bei dem Aufruf von "execute" ist inzwischen die Kategorie auf 2 gesetzt, das heißt, wir erhalten jetzt die Gerichte der Kategorie 2. Wir haben uns in diesem Film die Prepared Statements bei PDO angeschaut. Wichtig ist zuerst die Methode "prepare", um das ganze vorzubereiten, und dann wird das ausgeführt mit "execute". Außerdem haben Sie gesehen, wie Sie Daten mit "bindValue" und "bindParam" binden können, bei "bindValue" wird der Wert übergeben, das kann man für Variablen oder Literale verwenden, bei "bindParam" hingegen werden die Daten per Referenz übergeben, und das kann man nur bei Variablen einsetzen.

Datenbanken und PHP Grundkurs

Erfahren Sie alles, was Sie brauchen, um mit PHP Datenbanken anzusprechen, Daten einzutragen, zu verändern, zu löschen und abzufragen.

1 Std. 44 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:11.01.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!