PHP MySQL Datenbank Klasse
Mit dieser PHP MySQL Datenbank Klasse kannst du innerhalb weniger Sekunden eine Verbindung zu deiner MySQL Datenbank aufbauen und sichere Queries ausführen.
Einfach, flexibel und dennoch sicher: Diese PHP MySQL Datenbank Klasse nutzt die mysqli-Erweiterung und Prepared Statements, wodurch SQL-Injection Angriffe automatisch verhindert werden. Dadurch ist sie auch prima für Einsteiger geeignet.
Einfach und schnell: PHP MySQL Datenbank Klasse
Für eine bessere Kontrolle über den Code habe ich ein GitHub Repository angelegt. Nutzbar ist diese Klasse für alle aktuellen PHP Versionen (einschließlich PHP 8.3).
Du darfst diese Klasse frei und kostenlos für deine Projekte (auch kommerziell) verwenden und natürlich beliebig erweitern und verändern. Über Issues oder Pull Requests im Repo würde ich mich auch freuen – lasst uns diese Klasse stetig verbessern.
Schritt 1: Datenbank Klasse ins Projekt kopieren
Für den ersten Schritt kopierst du dir die komplette Klasse und erstellst in deiner Projektstruktur eine neue Datei, z.B. Database.php mit folgendem Inhalt:
<?php /** * Simple PHP MySQLi Database class for PHP7.* & PHP8.* * ---------------------------------------- * This class provides a simple way to connect to your database and execute your queries. * It uses prepared statements to prevent SQL injections. * * @author LH * @link https://webdeasy.de/en/php-mysql-database-class */ class Database { private $host, $database, $username, $password, $connection; // connection credentials private $port = 3306; // default port private $affected_rows; // properties to save before executing next query /** * Sets the connection credentials to connect to your database. * * @param string $host - the host of your database * @param string $username - the username of your database * @param string $password - the password of your database * @param string $database - your database name * @param integer $port - the port of your database * @param boolean $autoconnect - to auto connect to the database after settings connection credentials */ function __construct($host, $username, $password, $database, $port = 3306, $autoconnect = true) { $this->host = $host; $this->database = $database; $this->username = $username; $this->password = $password; $this->port = $port; if ($autoconnect) $this->open(); } /** * Open the connection to your database. */ function open() { $this->connection = new mysqli($this->host, $this->username, $this->password, $this->database, $this->port); } /** * Close the connection to your database. */ function close() { $this->connection->close(); } /** * * Execute your query * * @param string $query - your sql query * @param array $parameters - your parameters to bind to your query * @return mysqli_result result of the executed query */ function query($query, $parameters = array()) { // reset data of last query $this->affected_rows = 0; // prepare the query $stmt = $this->connection->prepare($query); // check if prepare statement failed if ($stmt === false) { die("Error in prepare statement: " . $this->connection->error); } // check if parameters are given if (!empty($parameters)) { $types = ""; $bindParams = []; // get the types of the parameters foreach ($parameters as $param) { if (is_int($param)) { $types .= "i"; } elseif (is_double($param)) { $types .= "d"; } else { $types .= "s"; } $bindParams[] = $param; } // bind the parameters to the query $stmt->bind_param($types, ...$bindParams); } // execute the query if ($stmt->execute()) { $result = $stmt->get_result(); $this->affected_rows = $stmt->affected_rows; $stmt->close(); return $result; } else { die("Error executing query: " . $stmt->error); } } /** * Get the amount of affected rows of the last executed query. * @return integer */ function get_affected_rows() { return $this->affected_rows; } /** * Get the last inserted id of the last executed query. * @return integer */ function get_last_inserted_id() { return $this->connection->insert_id; } }
Schritt 2: PHP MySQL Datenbank Klasse einbinden
Dein restlicher Programmcode sollte in einer anderen PHP-Datei geschrieben sein. Dort fügst Du folgenden Code ein um die Klasse einzubinden:
require_once("path/to/your/file/Database.php");
Schritt 3: Datenbank Instanz erstellen
Um eine Verbindung zu deiner MySQL Datenbank aufzubauen, müssen wir eine Instanz der Klasse erstellen. Dazu benötigen wir die Zugangsdaten zur Datenbank. Die optionalen Parameter des Konstrukturs kannst du der Readme entnehmen. So könnte ein Aufruf aussehen:
$database = new Database("localhost", "testuser", "verySafePassword", "yourDatabase");
Mit den übergebenen Zugangsdaten wird versucht eine Verbindung zur Datenbank aufzubauen. Das passiert automatisch, falls der Parameter $autoconnect
auf true
steht (s. Zeile 27).
Falls Du keine Fehler angezeigt bekommst, ist die Verbindung zur Datenbank erfolgreich hergestellt. Jetzt kannst Du deine SQL-Abfragen formulieren.
Schritt 4: Eigene SQL Queries ausführen
Die Queries kannst du der Funktion query($query, $params)
übergeben. Das Query wird an die Datenbank geschickt und die Funktion gibt das Result als Ergebnis zurück.
Die Funktion erwartet zwei Parameter: zum einen den Query-String und ein Array mit Parametern. Alle Werte ersetzt du durch ein ? in deinem Query. Diese dienen als Platzhalter und werden im $params
Array übergeben. Die Anzahl der Fragezeichen und die Anzahl der Parameter des $params
Arrays müssen übereinstimmen. Ich denke am verständlichsten wird das, wenn wir uns Codebeispiele dazu anschauen.
Beispiel: Insert Query
$query = "INSERT INTO users (id, name) VALUES (?, ?);"; $params = array(1, "Peter Parker"); $database->query($query, $params);
Beispiel: Select Query
$query = "SELECT name FROM users WHERE id = ?"; $params = array(1); $result = $database->query($query, $params); while($row = mysqli_fetch_assoc($result)) { echo "Name: " . $row["name"]; }
Beispiel: Update Query
$query = "UPDATE users SET name = ?, nickname = ?, updated = now() WHERE id = ?"; $params = array("Tony Stark", "Iron Man", 42); $result = $database->query($query, $params);
Beispiel: Delete Query
$query = "DELETE FROM users WHERE registered < ?"; $params = array(date("Y-m-d")); // returns the current date $result = $database->query($query, $params);
Beispiel: Letzte eingefügte ID auslesen
$query = "INSERT INTO users (id, name) VALUES (?, ?);"; $params = array(1, "Peter Parker"); $database->query($query, $params); echo $database->get_last_inserted_id();
Beispiel: Geänderte Zeilen auslesen
$query = "DELETE FROM users WHERE id = ?"; $params = array(42); $result = $database->query($query, $params); echo "Deleted rows: " . $database->get_affected_rows();
Hinweis: Diese Funktion gibt den Wert für affected_rows
und num_rows
zurück.
Außerdem solltest du am Ende Deines Programms noch die close()
-Funktion aufrufen, um geöffnete Datenbankverbindungen zu schließen.
$database->close();
Zusammenfassung
Diese PHP MySQL Datenbank Klasse ist so klein wie möglich und stellt nur die notwendigsten Funktionen bereit. Gerade als Anfänger sollte diese Klasse deshalb genau das richtige für dich sein. Trotzdem sind natürlich alle sicherheitsrelevanten Aspekte bedacht.
Beschreibungen aller Funktionen findest du hier im GitHub Repository. Sicherheitshinweise oder Verbesserungsvorschläge gerne als Issue ins GitHub Repository.
Wie fandest du diesen Beitrag?
Hallo!,Ihre class Database mit Insert funktioniert nicht,wenn die Datensätzeaus Formular eingegeben werden gibt ein weisses leeres Blatt aus.GrußGast
Das kommt aber vermutlich nicht von der Datenbankklasse, sondern hat eher etwas mit dem Übertragen der Daten an das PHP-Skript zu tun…
Viele Grüße
LH
Danke!,Ich hatte oft mit prozedurale Datenbank Scripte in php geschrieben,und schon sauber sql-injection bereinigt Datensätze ausgelesen.Ich bin neu was die Datenbank klasse betrefft,das heißt nichtdas ich nicht db class instanzieren kann.Ich habe schon andereKlassen mit einem php Skript ausgelesen und ausgeführt.GrußGast