commit 7b742d03864711adc57fc3d20f51fbb0e255cc99 Author: kolaente Date: Sun Jul 31 14:28:41 2016 +0200 Initial Commit diff --git a/db-blank.php b/db-blank.php new file mode 100755 index 0000000..69f728f --- /dev/null +++ b/db-blank.php @@ -0,0 +1,137 @@ +host = $host; + $this->dbname = $dbname; + $this->usr = $usr; + $this->pass = $pass; + $this->prefix = $prefix; + + + } + + private $col = null; + + public function setCol($col) + { + $this->col = $col; + } + + //Daten holen + public function get($where = [], $link = 'AND') + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($where)) + { + if (empty($this->data)) + { + $where = []; + } else + { + $where = $this->data; + } + } + + // + } + } + + //Daten einfügen + public function insert($args = []) + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($args)) + { + if (empty($this->data)) + { + $args = []; + } else + { + $args = $this->data; + } + } + + if (!empty($args)) + { + + } + } + } + + public function lastID() + { + return $this->dbh->lastInsertId(); + } + + //Daten Updaten + public function update($where = [], $dataToUpdate = [], $link = 'AND') + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($dataToUpdate)) + { + if (empty($this->data)) + { + $dataToUpdate = []; + } else + { + $dataToUpdate = $this->data; + } + } + + + } + } + + //Daten Löschen + public function delete($where = [], $link = 'AND') + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($where)) + { + if (empty($this->data)) + { + $where = []; + } + else + { + $where = $this->data; + } + } + + + } + } + + //Aufräumen + public function clear() + { + $this->col = null; + $this->data = ''; + } + +} \ No newline at end of file diff --git a/db-mysql.php b/db-mysql.php new file mode 100755 index 0000000..798c736 --- /dev/null +++ b/db-mysql.php @@ -0,0 +1,276 @@ +host = $host; + $this->dbname = $dbname; + $this->usr = $usr; + $this->pass = $pass; + $this->prefix = $prefix; + + $this->dbh = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $usr, $pass); + + //UTF-8 + $this->dbh->exec("SET NAMES 'utf8'"); + $this->dbh->exec("SET CHARACTER SET 'utf8'"); + } + + private $col = null; + + public function setCol($col) + { + $this->clear(); + $this->col = $col; + } + + //Daten holen + public function get($where = [], $link = 'AND') + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($where)) + { + if (empty($this->data)) + { + $where = []; + } else + { + $where = $this->data; + } + } + + //Where zusamenbauen + $whereCl = ''; + $whereAr = []; + if (!empty($where)) + { + $i = 1; + $whereCount = count($where); + $whereCl = ' WHERE '; + foreach ($where as $col => $val) + { + $whereCl .= $col . ' = ?'; + $whereAr[] = $val; + if ($i < $whereCount) $whereCl .= ' ' . $link . ' '; + $i++; + } + } + + //print_r($whereAr); + + $stmt = $this->dbh->prepare('SELECT * FROM ' . $this->prefix . $this->col . $whereCl); + $stmt->execute($whereAr); + + $all = []; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) + { + $all[] = $row; + } + + $this->data = ''; + /*$cnt = count($all); + + if ($cnt == 1) + { + $this->data = $all[0]; + return $all[0]; + } else + {*/ + $this->data = $all; + return $all; + //} + } + } + + //Daten einfügen + public function insert($args = []) + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($args)) + { + if (empty($this->data)) + { + $args = []; + } else + { + $args = $this->data; + } + } + + if (!empty($args)) + { + $stmt = 'INSERT INTO ' . $this->prefix . $this->col . ' (`'; + $i = 1; + $vals = []; + $valCnt = ''; + foreach ($args as $key => $val) + { + $stmt .= $key.'`'; + //$vals[] = utf8_encode($val); + $vals[] = $val; + $valCnt .= '?'; + if ($i < count($args)) + { + $stmt .= ', `'; + $valCnt .= ', '; + } + $i++; + } + $stmt .= ') VALUES (' . $valCnt . ')'; + //echo $stmt; + + $insert = $this->dbh->prepare($stmt); + return $insert->execute($vals); + } + } + } + + public function lastID() + { + return $this->dbh->lastInsertId(); + } + + //Daten Updaten + public function update($where = [], $dataToUpdate = [], $link = 'AND') + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($dataToUpdate)) + { + if (empty($this->data)) + { + $dataToUpdate = []; + } else + { + $dataToUpdate = $this->data; + } + } + + + //echo mb_detect_encoding($dataToUpdate['alias']); + //print_r($dataToUpdate); + + $stmt = 'UPDATE ' . $this->prefix . $this->col . ' SET '; + $vals = []; + $i = 1; + foreach ($dataToUpdate as $key => $val) + { + $stmt .= $key . ' = ?'; + //$val = utf8_encode($val); + //$vals[] = utf8_encode($val); + $vals[] = $val; + //echo mb_detect_encoding($val).' -> '.$val; + if ($i < count($dataToUpdate)) $stmt .= ', '; + $i++; + } + + //Where zusamenbauen + $whereCl = ''; + $whereAr = []; + if (!empty($where)) + { + $i = 1; + $whereCount = count($where); + $whereCl = ' WHERE '; + foreach ($where as $col => $val) + { + $whereCl .= $col . ' = ?'; + $vals[] = $val; + if ($i < $whereCount) $whereCl .= ' ' . $link . ' '; + $i++; + } + } + $stmt .= $whereCl; + + //secho $stmt; + $update = $this->dbh->prepare($stmt); + return $update->execute($vals); + } + else + { + return false; + } + } + + //Daten Löschen + public function delete($where = [], $link = 'AND') + { + if (isset($this->col)) + { + //Entweder übergebene Daten oder in $this->data vorhandene nutzen + if (empty($where)) + { + if (empty($this->data)) + { + $where = []; + } else + { + $where = $this->data; + } + } + + $stmt = 'DELETE FROM ' . $this->prefix . $this->col; + //Where zusamenbauen + $whereCl = ''; + $whereAr = []; + $vals = []; + if (!empty($where)) + { + $i = 1; + $whereCount = count($where); + $whereCl = ' WHERE '; + foreach ($where as $col => $val) + { + $whereCl .= $col . ' = ?'; + $vals[] = $val; + if ($i < $whereCount) $whereCl .= ' ' . $link . ' '; + $i++; + } + } + $stmt .= $whereCl; + + //echo $stmt; + $delete = $this->dbh->prepare($stmt); + return $delete->execute($vals); + } + } + + //Version + public function version() + { + $STH = $this->dbh->query('SELECT VERSION( ) AS version'); + $STH->setFetchMode(PDO::FETCH_OBJ); + if ($row = $STH->fetch()) + { + return $row->version; + } + } + + //Aufräumen + public function clear() + { + $this->col = null; + $this->data = ''; + } + +} \ No newline at end of file diff --git a/example.php b/example.php new file mode 100755 index 0000000..838051c --- /dev/null +++ b/example.php @@ -0,0 +1,26 @@ +setCol('blog'); +//$db->data['id'] = 13; +//$db->get(); +//print_r($db->get()); +//print_r($db->data); + + +/*$db->data['titel'] = 'testdbclas'; +$db->data['alias'] = '---d-d-d-d-'; +$db->insert();*/ +//if($db->insert(['titel' => 'testclass', 'inhalt' => 'baum', 'alias' => '0000003030498-g-dfghd-f'])) echo 'yay'; + +/*$db->data['titel'] = 'GAadsfhganz Neu'; +$db->data['inhalt'] = 'gabs noch net';*/ +//$db->update(['id' => 12]); +//if($db->update(['titel' => 'wat anderes', 'inhalt' => 'meh'], ['id' => 7])) echo 'update!'; + +//$db->data['id'] = 9; +//$db->delete(); +//if($db->delete(['id' => 6])) echo 'del'; + +$db->clear(); \ No newline at end of file diff --git a/readme.de.md b/readme.de.md new file mode 100644 index 0000000..2818204 --- /dev/null +++ b/readme.de.md @@ -0,0 +1,136 @@ +#Datenbankklasse + +Diese Datenbankklasse soll einen vereinfachten Umgang beim Arbeiten mit Datenbanken bieten. Dies wird dadurch erreicht, dass die oft umständlichen Funktionen in vier Hauptfunktionen gebündelt werden: + +## Initialisieren + +Zuerst muss eine Datenbankverbindung hergestellt werden: +`$db = new db('server', 'database', 'user', 'pass', 'prefix');` +Der letzte Pararmeter ist Optional. Wenn angegeben, wird er bei jedem Aufruf einer der Funktion vor den Tabellennamen gestellt. + +Um anschließend die Methoden nutzen zu können, müssen wir noch sagen, um welche Tabelle es geht: +`$db->setCol('Blog');` + +## Daten übergeben + +Daten können bei allen Methoden entweder direkt als Pararmeter an die Funktion übergeben werden, oder aber vorher in `$db->data` mit den Selben Optionen deklariert werden. Die übergebenen Pararmeter haben höhere Priorität, d.h. wenn sowohl Parameter dirket an die Funktion übergeben werden als auch in `$db->data` Daten festgelegt werden, werden die Daten verwendet, die direkt übergeben wurden. + +##get() + +Diese Funktion wird dazu genutzt, Datensätze aus der Datenbank zu holen, sie gibt ein Array mit den Inhalten zurück. + +Liefert ein Array mit den Daten zurück. + +Wenn nur ein Datensatz gefunden wurde, wird dieser driekt zurückgegeben. Andernfalls werden die Datensätze als Einträge in einem Array zurückgegeben. Alle Daten sind immer in `$db->data` verfügbar. + +### Syntax + +`$db->get($where = [], $link = 'AND')` + +`$where` Ein Array, mit welchem Schlüsselwörter bennant und mit Werten befüllt werden können. Wenn vorhanden, werden nur die Werte zurückgegeben, auf welche die angegebenen Werte zutreffen. Schema: `['Spalte' => 'Wert']` +`$link` Wenn über `$where` mehr als ein Schlüssel übergeben wird, lässt sich über diesen Pararmeter die Art der Verknüpfung definieren. Standard ist 'AND'. + +## insert() + +Mit dieser Funktion können Daten in die Datenbank eingefügt werden. + +Gibt `true` zurück, wenn die Daten erfolgreich eingefügt wurden. Andernfalls `false`. + +### lastID() + +Nachdem diese Funktion ausgeführt wurde, gibt die Funktion `lastID()` die ID des zuletzt eingefügten Datensatzes zurück. + +### Syntax + +`insert($args = [])` + +`$args` Ein Array, welches die Spalten mit dazugehörigen Daten enthält. Schema: `['Spalte' => 'Daten']` + +## update() + +Mit dieser Funktion werden bereits vorhandene Daten in der Datenbank geändert. + +Gibt `true` zurück, wenn die Daten erfolgreich geändert wurden. Andernfalls `false`. + +### Syntax + +`update($where = [], $dataToUpdate = [], $link = 'AND')` + +`$where` Ein Array, mit welchem Schlüsselwörter bennant und mit Werten befüllt werden können. Wenn vorhanden, werden nur die Datensätze geändert, auf welche die Schlüsselwörter und Werte zutreffen. **Ansonsten werden alle Datensätze in der Tabelle geändert!** Schema: `['Spalte' => 'Wert']` +`$dataToUpdate` Ein Array, der Daten, welche geändert werden sollen. Schema: `['Spalte' => 'Neuer Inhalt']` +`$link` Wenn über `$where` mehr als ein Schlüssel übergeben wird, lässt sich über diesen Pararmeter die Art der Verknüpfung definieren. Standard ist 'AND'. + +## delete() + +Mit dieser Funktion können Daten aus der Datenbank gelöscht werden. + +Gibt `true` zurück, wenn die Daten erfolgreich geändert wurden. Andernfalls `false`. + +### Syntax + +`delete($where = [], $link = 'AND')` + +`$where` Ein Array, mit welchem Schlüsselwörter bennant und mit Werten befüllt werden können. Wenn vorhanden, werden nur die Datensätze gelöscht, auf welche die Schlüsselwörter und Werte zutreffen. **Ansonsten werden alle Datensätze in der Tabelle gelöscht!** Schema: `['Spalte' => 'Wert']` +`$link` Wenn über `$where` mehr als ein Schlüssel übergeben wird, lässt sich über diesen Pararmeter die Art der Verknüpfung definieren. Standard ist 'AND'. + +## clear() + +Mit dieser Funktion wird die aktuelle Collection auf null gesetzt, damit kann man bequem auf eine andere Datenbank zugreifen. + +# Beispiele + +## Daten Holen + +`$db = new db('localhost', 'testdeb', 'root', '123456789');` +`$db->setCol('blog');` +`$db->data['id'] = 3;` +`print_r($db->get());` + + _Oder:_ + + `$db = new db('localhost', 'testdeb', 'root', '123456789');` + `$db->setCol('blog');` + `print_r($db->get(['id' => 3]));` + + Dies wird dieselben Daten zurückliefern. + +## Daten einfügen + +`$db = new db('localhost', 'testdeb', 'root', '123456789');` +`$db->setCol('blog');` +`$db->data['title'] = 'test';` +`$db->data['content'] = 'Lorem Ipsum...';` +`if($db->insert()) echo 'Daten wurden eingefügt';` + + _Oder:_ + + `$db = new db('localhost', 'testdeb', 'root', '123456789');` + `$db->setCol('blog');` + `if($db->insert(['title' => 'test', 'content' => 'Lorem Ipsum...'])) echo 'Daten wurden eingefügt';` + +## Daten Ändern + +`$db = new db('localhost', 'testdeb', 'root', '123456789');` +`$db->setCol('blog');` +`$db->data['title'] = 'GAaanz Neu';` +`$db->data['content'] = 'gabs noch net';` +`$db->update(['id' => 10]);` + + _Oder:_ + + `$db = new db('localhost', 'testdeb', 'root', '123456789');` + `$db->setCol('blog');` + `if($db->update(['title' => 'GAaanz Neu', 'content' => 'gabs noch net'], ['id' => 10])) echo 'Daten wurden erfolgreich geändert.';` + +## Daten löschen + + `$db = new db('localhost', 'testdeb', 'root', '123456789');` + `$db->setCol('blog');` + `$db->data['id'] = 9;` + `if($db->delete()) echo 'Daten wurden erfolgreich gelöscht';` + + _Oder:_ + + `$db = new db('localhost', 'testdeb', 'root', '123456789');` + `$db->setCol('blog');` + `if($db->delete(['id' => 9])) echo 'Daten wurden erfolgreich gelöscht';` \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100755 index 0000000..db1d372 --- /dev/null +++ b/readme.md @@ -0,0 +1,183 @@ +# PHP Database-Class + +This Database-Class is made to make handling databases (and database-operations) in PHP more easy. + +##Other Databases + +You can add support for any other database by using the file `db-blank.php`. I'm currently working to support mongodb. + +## Examples + +Examples can be found in `examples.php` or in the "Examples"-Section of this document. + +## Initialize + +First, you need to create an connection to your database: +```php +$db = new db('server', 'database', 'user', 'password', 'prefix'); +``` +The last pararmeter is optional. If provided, it will be put in front of each table name. This is useful if you have multiple applications in one database. + +To use the methods, you need to first specify the table: + +```php +$db->setCol('Blog'); +``` + +## Provide Data + +You can provide data either directly in the function (via pararmeters) or before via `$db->data` with the same options. +Parameters you provide directly in the function, are of higher priority as data provided via `$db->data`. + +##get() + +Get data with this function, it returns an array with the data. + +All data is available via `$db->data`. + +### Syntax + +`$db->get($where = [], $link = 'AND')` + +`$where` + An array to return specific data. If provided, only data which matches is returnend. Scheme: `['key' => 'value']`. + + You can also provde the data via `$db->data['key'] = 'value'`. + +`$link` + If you provide more than one key, you can choose via this pararmeter how to connect them, currently via `AND` or `OR`. Standard is `AND`. + +To see it in action, take a look at `example.php` or the "Examples"-Section at the bottom of this document. + +## insert() + +Inserts data provided via `$db->data` or directly via the function. + +Returns `true` on success, otherwise `false`. + +### lastID() + +After running `$db->insert()`, this function returns the ID of the lastly inserted Data. + +### Syntax + +`insert($args = [])` + +`$args` An array which contains the data to insert. Scheme: `['Spalte' => 'Daten']` + +## update() + +Updates already existing data in the database. + +Returns `true` on success, otherwise `false`. + +### Syntax + +`update($where = [], $dataToUpdate = [], $link = 'AND')` + +`$where` +An array to update specific data. If provided, only data which matches is updated. Scheme: `['key' => 'value']`. +**If not provided, all data is updated!** + +`$dataToUpdate` +An array with data to update. Scheme: `['Spalte' => 'Neuer Inhalt']` + +You can also provde the data via `$db->data['key'] = 'value'`. + +`$link` +If you provide more than one key, you can choose via this pararmeter how to connect them, currently via `AND` or `OR`. Standard is `AND`. + +## delete() + +Deletes data from the database. + +Returns `true` on success, otherwise `false`. + +### Syntax + +`delete($where = [], $link = 'AND')` + +`$where` +An array to update specific data. If provided, only data which matches is deleted. Scheme: `['key' => 'value']`. +**If not provided, all data is deleted!** + +`$link` +If you provide more than one key, you can choose via this pararmeter how to connect them, currently via `AND` or `OR`. Standard is `AND`. + +## clear() + +Resets the current table and contents of `$db->data`. This function will be executed automatically if you execute `$db->setCol()`. + +# Examples + +## Getting Data + +```php +`$db = new db('localhost', 'testdb', 'root', '123456789');` +`$db->setCol('blog');` +`$db->data['id'] = 3;` +`print_r($db->get());` +``` + + _Or:_ + +```php + `$db = new db('localhost', 'testdb', 'root', '123456789');` + `$db->setCol('blog');` + `print_r($db->get(['id' => 3]));` +``` + + Will return the same data. + +## Insert Data + +```php +`$db = new db('localhost', 'testdb', 'root', '123456789');` +`$db->setCol('blog');` +`$db->data['title'] = 'test';` +`$db->data['content'] = 'Lorem Ipsum...';` +`if($db->insert()) echo 'Data was inserted';` +``` + + _Or:_ + +```php + `$db = new db('localhost', 'testdb', 'root', '123456789');` + `$db->setCol('blog');` + `if($db->insert(['title' => 'test', 'content' => 'Lorem Ipsum...'])) echo 'Data was inserted';` +``` + +## Update Data + +```php +`$db = new db('localhost', 'testdb', 'root', '123456789');` +`$db->setCol('blog');` +`$db->data['title'] = 'New';` +`$db->data['content'] = 'Lorem';` +`$db->update(['id' => 10]);` +``` + + _Or:_ + +```php + `$db = new db('localhost', 'testdb', 'root', '123456789');` + `$db->setCol('blog');` + `if($db->update(['title' => 'New', 'content' => 'Lorem'], ['id' => 10])) echo 'Data was updated successfully.';` +``` + +## Delete Data + +```php + `$db = new db('localhost', 'testdb', 'root', '123456789');` + `$db->setCol('blog');` + `$db->data['id'] = 9;` + `if($db->delete()) echo 'Data was deleted successfully.';` + ``` + + _Or:_ + + ```php + `$db = new db('localhost', 'testdb', 'root', '123456789');` + `$db->setCol('blog');` + `if($db->delete(['id' => 9])) echo 'Data was deleted successfully.';` + ``` \ No newline at end of file