PHP 7.* Flexible MySQLi-Datenbank Klasse (+ Download)

PHP 7.* Flexible MySQLi-Datenbank Klasse (+ Download)

Wir kennen es doch Alle: Nervigen Code immer und immer wieder schreiben! Damit ist jetzt Schluss. Mit dieser PHP MySQLi Datenbank Klasse kannst Du ganz einfach eine Verbindung zu deiner MySQL-Datenbank herstellen.

Diese Klasse ist ganz einfach und flexibel für jedes Projekt aufgebaut. Außerdem ist sichergestellt, dass keine SQL-Injection Angriffe durchgeführt werden können. Die unten stehende Klasse darfst Du frei für Deine Projekte (auch kommerziell) verwenden und natürlich beliebig erweitern. Und so verwendest Du sie:

1. Klasse in Deine Projektstruktur einbinden

Für diesen Schritt kopierst Du dir die komplette Klasse und erstellst in deiner Projektstruktur eine neue Datei, z.B. Database.php. Anschließend kopierst du den kompletten unten stehenden Code dort hinein.

<?php

/**
* Simple Database class for PHP7+
* The class contains main functions for your database. For a detailed documentation, see: https://webdeasy.com/
* created 08.11.2017
* 
* @author LH
*/
class Database {

	private $host, $database, $username, $password, $connection;
	private $port = 3306;
	
	/**
	*
	* Sets the connection credentials to connection 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
	* @return the result of the executed query 
	*/
	function query($query) {
		return $this->connection->query($query);
	}

	/**
	*
	* Escape your parameter
	*
	* @param string $string - your parameter to escape
	* @return the escaped string 
	*/
	function escape($string) {
		return $this->connection->escape_string($query);
	}
}

?>

2. Datenbank Klasse einbinden

Dein Programmcode läuft in einer anderen PHP-Datei. Dort fügst Du folgenden Code ein um die Klasse einzubinden:

require_once("path/to/your/file/Database.php");

Wo ist eigentlich der Unterschied zwischen require und include? Das!

3. Instanz erstellen

Um eine Verbindung zur 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 Klasse entnehmen. So könnte ein Aufruf aussehen:

$database = new Database("localhost", "testuser", "verySafePassword", "ourDatabase");

Mit den übergebenen Zugangsdaten wird versucht eine Verbindung zur Datenbank aufzubauen. Das passiert automatisch, falls der Parameter $autoconnect auf true steht (s. Zeile 26).

Falls Du keine Fehler angezeigt bekommst, ist die Verbindung zur Datenbank erfolgreich hergestellt. Jetzt kannst Du deine SQL-Abfragen formulieren.

4. Parameter maskieren!

Anschließend folgt der wohl wichtigste Schritt. Um SQL-Injections vorzubeugen, muss jeder Parameter, den Du im Query verwendest maskiert werden. Dadurch kann verhindert werden, dass schädliche SQL-Anweisung – ob absichtlich oder unabsichtlich – in dein Query und somit in dein Serversystem gelangen. Folgende Zeilen müssen vor jede Abfrage:

$parameter = $_POST["id"];
$parameter = $db->escape($parameter);

In diesem Beispiel wird der Parameter id der per POST-Request an PHP übergeben und durch die zweite Zeile maskiert.

5. Deine Abfragen

Die Queries kannst du der Funktion query($query) übergeben. Das Query wird an die Datenbank geschickt und die Funktion gibt das Result als Ergebnis zurück.

Beispiel für ein Insert-Query

$query = "INSERT INTO users (id, name) VALUES (1, 'Peter Parker');";
$db->query($query);

Beispiel für ein Select-Query mit Ausgabe des Results

$query = "SELECT name FROM users WHERE id = 1";
$result = $db->query($query);

while($row = mysqli_fetch_assoc($result)) {
	echo "Name: " . $row["name"];
}

Außerdem solltest Du am Ende Deines Programms noch die close()-Funktion aufrufen, um geöffnete Datenbankverbindungen zu schließen.

$db->close();

Letztendlich sind das die Funktionen der Datenbank Klasse. Ich habe sie so einfach wie möglich gehalten, aber trotzdem versucht alle wichtigen und sicherheitsrelevanten Funktionen einzubauen. Und Ja: Mir ist bewusst, dass PHP und die MySQLi Klasse noch deutlich mehr Funktionen zu bieten hat. Diese Klasse ist aber gerade für einfache, schnelle und flexible Anwendung gedacht, die nur eine einfache Datenbankverbindung erfordern.

Sicherheitshinweise oder Verbesserungsvorschläge gerne in die Kommentare, damit ich sie ergänzen kann! 🙂

 
Veröffentlicht inPHP, SQL
1+

Beteilige dich an der Unterhaltung

1 Kommentar

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.