diff --git a/uebung9/uebung09-examples/prepared-statements/prepared_statements.php b/uebung9/uebung09-examples/prepared-statements/prepared_statements.php new file mode 100644 index 0000000..3f48e63 --- /dev/null +++ b/uebung9/uebung09-examples/prepared-statements/prepared_statements.php @@ -0,0 +1,87 @@ +prepare("INSERT INTO t VALUES(?, ?)"); + +// Parameter binden: Für jedes ? Typ (s=String, i=Integer) und Variable angeben +$statement->bind_param("si", $string, $integer); + +// Query ausführen +$statement->execute(); + +// Statement schließen +$statement->close(); + +// Verbindung schließen +$mysqli->close(); + + +// ---------------------------------------------------- +// Prepared Statement bei SELECT-Queries +// ---------------------------------------------------- + +// Variablen, die wir in der Query verwenden wollen +// Diese kommt normalerweise aus einem GET- oder POST-Request +// Das %-Zeichen ist ein Platzhalter und bedeutet "hier darf irgendwas stehen" +$search_string = "%String%"; + + +// Verbindung aufbauen +$mysqli = new mysqli($host, $user, $password, $database); + +// Prepare: Für jede Variable ein ? +$statement = $mysqli->prepare("SELECT * FROM t WHERE string_column LIKE ?"); + +// Parameter binden: Für jedes ? Typ (s=String, i=Integer) und Variable angeben +$statement->bind_param("s", $search_string); + +// Query ausführen +$statement->execute(); + +// Ergebnis an variablen binden: Für jede Spalte aus dem Result-Set eine Variable +// Hier zwei Spalten => zwei Variablen! +$statement->bind_result($string_column, $integer_column); + +// Über das Result-Set iterieren (fetch_assoc() geht hier NICHT!) +while ($statement->fetch()) { + // Die Variablen aus bind_result werden jetzt mit Werten aus dem Result-Set gefüllt! + echo "string_column hat den Wert: $string_column. "; + echo "integer_column hat den Wert: $integer_column. "; + echo "\n"; +} + + +// Speicher des Result-Sets freigeben +$statement->free_result(); + +// Statement schließen (Speicher des Statements freigeben) +$statement->close(); + +// Verbindung schließen +$mysqli->close(); \ No newline at end of file diff --git a/uebung9/uebung09-examples/prepared-statements/setup.sql b/uebung9/uebung09-examples/prepared-statements/setup.sql new file mode 100644 index 0000000..9ab7a3c --- /dev/null +++ b/uebung9/uebung09-examples/prepared-statements/setup.sql @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS t; + +CREATE TABLE t ( + string_column TEXT NOT NULL, + integer_colum INT NOT NULL +); + +INSERT INTO t +VALUES + ("Erster String", 98765), + ("Zweiter String", 87654), + ("Dritter String", 76543); + diff --git a/uebung9/uebung09-examples/to-do-list-database/inc/Database.php b/uebung9/uebung09-examples/to-do-list-database/inc/Database.php new file mode 100644 index 0000000..d3d6ee3 --- /dev/null +++ b/uebung9/uebung09-examples/to-do-list-database/inc/Database.php @@ -0,0 +1,95 @@ +connection = new mysqli($host, $user, $password, $database); + } + + /** + * Schließt die Verbindung zru Datenbank + */ + public function __destruct() + { + $this->connection->close(); + } + + + /** + * Löscht die Tabelle tasks und erstelle sie anschließend erneut + */ + public function reset() + { + $this->connection->query("DROP TABLE IF EXISTS tasks"); + $this->connection->query("CREATE TABLE tasks(id INT NOT NULL AUTO_INCREMENT, name TEXT, PRIMARY KEY (id));"); + } + + + /** + * Fügt einen Task mit dem Namen $name in die Tabelle tasks ein + * + * @param string $name + * @return bool true, falls Einfügen erfolgreich + */ + public function addTask($name) + { + $statement = $this->connection->prepare("INSERT INTO tasks(name) VALUES(?)"); + $statement->bind_param("s", $name); + return $statement->execute(); + } + + /** + * Löscht den Taks mit der ID $id aus der Tabelle tasks + * + * @param int $id + * @return bool, falls Löschen erfolgreich + */ + public function deleteTask($id) + { + $statement = $this->connection->prepare("DELETE FROM tasks WHERE id = ?"); + $statement->bind_param("i", $id); + return $statement->execute(); + } + + /** + * Liefert ein assozaitves Array aller in der Tabelle tasks gespeicherten Einträge + * + * @return array + */ + public function getTasks() + { + $result = $this->connection->query("SELECT * FROM tasks"); + + $resultArray = []; + + while ($line = $result->fetch_assoc()) { + array_push($resultArray, $line); + } + + $result->free(); + + return $resultArray; + } + + +} \ No newline at end of file diff --git a/uebung9/uebung09-examples/to-do-list-database/index.php b/uebung9/uebung09-examples/to-do-list-database/index.php new file mode 100644 index 0000000..75ef75d --- /dev/null +++ b/uebung9/uebung09-examples/to-do-list-database/index.php @@ -0,0 +1,57 @@ + + +
+ +