Database - (db.class.php)

CONST MAXMULTIQUERY = 30 maximale Anfragen an die Datenbank
CONST CHARSETDEFAULT = 'utf8' Standart Charset
CONST COLLATIONDEFAULT = 'utf8_general_ci' Standart Collation

new db() - Object

$string db = null Datenbankname
$string table = null Tabelle der Datenbank
$string dbTable = null vollständiger Datenbank.Tabellen-ID 'fachkunde.files'
$object mySqli = null MySqli Objekt
$mixed lastResult = null gibt das letzte Ergebnis von $this->query(); zurück
$string charset = null Charset der Datenbank
$string collation = null Collation der Datenbank
$array specification = null Datenbank Spezifikation
[
'Collation' => #COLLATION,
'Charset' => #CHARSET,
'Id' => #ID,
'Default' => #STANDART,
'Compiled' => #KOMPILIERT,
'Sortlen' => #SORTLEN
]
$bool connected = false gibt mit true oder false an ob die Datenbank verbunden ist
$bool valid = false gibt mit true oder false an ob die Datenbank gültig ist
__construct ([$string $object $dbTable = null[, $string $tableId = null]])
$dbTable optional; gibt den Datenbank-ID und optional den Tabellennamen an 'public.browser'
'.browser' definiert die Tabelle browser der Standartdatenbank; bei null, wird die Standartdatenbank ausgegeben; oder ein neues new db () Object
$tableId optional; gibt die ID an, die in der XML-Datei als table id gespeichert ist
verbindet sich mit dem Server der Datenbank und der Datenbank selber oder erstellt eine neue Datenbank wenn sie nicht existiert. Unter gewissen Voraussetzungen wird auch die Tabelle erstellt, wenn sie nicht existiert
$db = new db ('xenec.browser');
__destruct ()
schließt die Datenbank und gibt true bei Erfolg zurück; ansonsten false
__get ($string $name)
$name Name der Variable
gibt die Eigenschaften des Datenbank Objekts zurück
$db = new db ('xenec.browser');
echo $db->table;
__set ($string $name, $mixed $value)
$name Name der Variable
$value Variable die gespeichert werden soll
speichert die Eigenschaften des Datenbank Objekts
$db = new db ('xenec.browser');
$db->table = 'browser';
__debugInfo ()
gibt alle Eigenschaften des Datenbank Objekts zurück
$db = new db ('xenec.browser');
print_r ($db);
query ($string $query = null)
$query SQL Befehl, "SELECT * FROM tabelle WHERE spalte='beispiel'"
gibt bei Erfolg true, false oder $assoc_array mit Werten zurück; im Fehlerfall wird null zurückgegeben
$db = new db ('xenec.browser');
$db->query ("SELECT * FROM tabelle WHERE spalte='beispiel'");
$db->query ("SELECT * FROM $db->table WHERE spalte='beispiel'");
$db->query ("SELECT user_agent, count FROM user_agent WHERE crawler='1' ORDER BY count ASC");
real_escape_string ($string $string = null)
$string Zeichenkette die maskiert werden soll
Maskiert Sonderzeichen in einer Zeichenkette zur Verwendung in einer SQL-Anweisung, wobei der aktuelle Zeichensatz der Verbindung berücksichtigt wird, siehe https://www.php.net/manual/de/mysqli.real-escape-string.php; im Fehlerfall wird null zurückgegeben
$db = new db ('xenec.browser');
$db->real_escape_string ("' AND (SELECT SLEEP(5)) --");
$db->real_escape_string ("admin' --");

Tabellen

createTable ($string $tableId = null)
$tableId gibt die ID an, die in der XML-Datei als table id gespeichert ist
gibt true zurück wenn die Tabelle erfolgreich erstellt und gespeichert wurde; ansonsten false
$db = new db ('xenec.browser');
$db->createTable('browser'); // erstellt die Tabelle 'browser' in der Datenbank 'fachkunde' mit der Tabellen ID 'browser'
deleteTable ()
löscht die angegebene Tabelle wenn sie existiert; bei Erfolg wird true zurückgegeben; ansonsten false
$db = new db ('xenec.browser');
$db->deleteTable(); // löscht die Tabelle 'browser' in der Datenbank 'xenec'
clearTable ()
leert die angegebene Tabelle wenn sie existieren; bei Erfolg wird true zurückgegeben; ansonsten false
$db = new db ('xenec.browser');
$db->clearTable(); // leert die Tabelle 'browser' in der Datenbank 'xenec'
getTableColumn ([$bool $extended = false])
$extended optional; gibt bei true Zusatzinformationen über die Spalten der Tabelle zurück
gibt bei Erfolg ein $array mit den Spaltennamen zurück; im Fehlerfall null
$db = new db ('xenec.browser');
$col = $db->getTableColumn(); // gibt ein Array zurück mit allen Spaltennamen der Tabelle 'browser' in der Dantenbank 'xenec'
getTable ([$string $select = null])
$select optional; gibt die Spalte an, die ausgegeben werden soll
gibt ein array zurück mit allen Inhalten der Tabelle, führt den SQL Befehl SELECT $select FROM $this->table aus; im Fehlerfall wird null zurückgegeben
$db = new db ('xenec.browser');
$db->getTable ('userAgent');

Zeilen / Rows

createRow ($array $values = null)
$values gibt die Werte als array an, die gespeichert werden sollen [#SPALTE => #WERT]
gibt true zurück wenn die Zeile erstellt wurde, führt den SQL Befehl INSERT INTO $this->table (implode(array_keys($values))) VALUES (implode(array_values($values))) aus; ansonsten wird false zurückgegeben
$db = new db ('xenec.browser');
$db->createRow (['id' => 's20987f23', 'userAgent' => 'Chrome']);
updateRow ($array $values = null, $array $where = null)
$values gibt die Werte als array an, die gespeichert werden sollen [#SPALTE => #WERT]
$where gibt 'WHERE' als array an, wo die Zeile verändert werden soll [#SPALTE => #WERT] oder mehrere mit 'AND' getrennt [[#SPALTE => #WERT], [#SPALTE => #WERT]]
gibt true zurück wenn die Zeile aktualisiert wurde, führt den SQL Befehl UPDATE $this->table SET implode($values) WHERE implode($where) aus; ansonsten wird false zurückgegeben
$db = new db ('xenec.browser');

// UPDATE browser SET `id`="s20987f23", `userAgent`="Chrome 4.0" WHERE `userAgent`="Chrome"
$db->updateRow (['id' => 's20987f23', 'userAgent' => 'Chrome 4.0'], ['userAgent' => 'Chrome']);

// UPDATE browser SET `id`="s20987f23", `userAgent`="Chrome 4.0" WHERE `userAgent`="Chrome" AND `browser`="Firefox"
$db->updateRow (['id' => 's20987f23', 'userAgent' => 'Chrome 4.0'], ['userAgent' => 'Chrome', 'browser' => 'Firefox']);

deleteRow ($array $where = null)
$where gibt 'WHERE' als array an, wo die Zeile verändert werden soll [#SPALTE => #WERT] oder mehrere mit 'AND' getrennt [[#SPALTE => #WERT], [#SPALTE => #WERT]]
gibt true zurück wenn die Zeile gelöscht wurde, führt den SQL Befehl DELETE FROM $this->table WHERE implode($where) aus; ansonsten wird false zurückgegeben
$db = new db ('xenec.browser');

// DELETE FROM browser WHERE `userAgent`="Chrome"
$db->deleteRow (['userAgent' => 'Chrome']);

// DELETE FROM browser WHERE `userAgent`="Chrome" AND `browser`="Firefox"
$db->deleteRow (['userAgent' => 'Chrome', 'browser' => 'Firefox']);
getRow ([$string $select = null], $array $where = null)
$select optional; gibt die Spalte an, die ausgegeben werden soll
$where gibt 'WHERE' als array an, wo die Zeile verändert werden soll [#SPALTE => #WERT] oder mehrere mit 'AND' getrennt [[#SPALTE => #WERT], [#SPALTE => #WERT]]
gibt ein array zurück mit allen Inhalten der gefundenen Zeile, führt den SQL Befehl SELECT $select FROM $this->table WHERE implode($where) aus; im Fehlerfall wird null zurückgegeben
$db = new db ('xenec.browser');

// SELECT * FROM browser WHERE `userAgent`="Chrome"
$db->getRow ('*', ['userAgent' => 'Chrome']);

// SELECT * FROM browser WHERE `userAgent`="Chrome" AND `browser`="Firefox"
$db->getRow ('*', ['userAgent' => 'Chrome', 'browser' => 'Firefox']);

Spalten / Column

createCol ($string $column = null[, $string $setup = null[, $string $after = null]])
$column übergibt den Spaltenname der erstellt werden soll
$setup optional; übergibt die Einstellungen für die Spalte
$after optional; übergibt den Spaltenname, nach der die Spalte angehangen wird
gibt true zurück, wenn die Spalte erfolgreich erstellt wurde; ansonsten false
$db = new db ('xenec.browser');

$db->createCol ('userAgent');
$db->createCol ('BrowserName', 'TEXT NOT NULL', 'userAgent');
deleteCol ($string $column = null)
$column übergibt den Spaltenname der gelöscht werden soll
gibt true zurück, wenn die Spalte erfolgreich gelöscht wurde; ansonsten false
$db = new db ('xenec.browser');
$db->deleteCol ('userAgent');
columnExists ($string $column = null[, $bool $case_sensitive = false])
$column übergibt den Spaltenname der geprüft werden soll
$case_sensitive optional; mit true wird Groß- und Kleinschreibung beachtet
gibt true zurück, wenn die Spalte existiert; ansonsten false
$db = new db ('xenec.browser');
$db->columnExists ('userAgent');

Überprüfung

static db::isDb ($object $db = null)
$db übergibt das Datenbank Objekt new db ()
gibt true zurück wenn das Objekt eine Datenbank ist; ansonsten false
db::isDb(new db ('fachkunde.files')); // erstellt die Tabelle 'files' in der Datenbank 'fachkunde' mit der Tabellen ID 'streamFile'

Existenz

static db::exists ([$string $object $dbTable = null])
$dbTable optional; gibt den Datenbank-ID und optional den Tabellennamen an 'public.browser'
'.browser' definiert die Tabelle browser der Standartdatenbank; bei null, wird die Standartdatenbank ausgegeben; oder ein neues new db () Object
prüft ob die Tabelle in der Datenbank oder nur die Datenbank existiert; Ausgabe von true oder false
db::exists ('public'); // prüft ob die Datenbank 'public' existiert
db::exists ('public.browser'); // prüft ob die Tabelle 'browser' in der Datenbank 'public' existiert
db::exists ('.browser'); // prüft ob die Tabelle 'browser' in der Standart-Datenbank existiert
static db::tableExists ([$string $object $dbTable = null])
$dbTable optional; gibt den Datenbank-ID und optional den Tabellennamen an 'public.browser'
'.browser' definiert die Tabelle browser der Standartdatenbank; bei null, wird die Standartdatenbank ausgegeben; oder ein neues new db () Object
prüft ob die Tabelle in der Datenbank existiert; Ausgabe von true oder false
db::tableExists ('public'); // gibt false zurück, da keine Tabelle angegeben
db::tableExists ('public.browser'); // prüft ob die Tabelle 'browser' in der Datenbank 'public' existiert
db::tableExists ('.browser'); // prüft ob die Tabelle 'browser' in der Standart-Datenbank existiert

Sonstiges

static db::sql ($string $object $dbTable = null, $string $command = null[, $string $array $value = null[, $string $array $cond = null[, $string $array $order = null]]])
$dbTable optional; gibt den Datenbank-ID und optional den Tabellennamen an 'public.browser'
'.browser' definiert die Tabelle browser der Standartdatenbank; bei null, wird die Standartdatenbank ausgegeben; oder ein neues new db () Object
$command SQL Befehl CREATE, SELECT, INSERT, UPDATE, DELETE, TRUNCATE
$value optional; übermittel die Werte, spalte=wert die gespeichert oder abgerufen werden sollen

als String:
'spalte'
'spalte, spalte, spalte'
'spalte="wert"'
'spalte="wert", spalte="wert", spalte="wert"'

als Array:
['spalte']
['spalte="wert"']
['spalte', 'spalte="wert"', 'spalte']
['spalte' => 'wert', 'spalte' => 'wert']
$cond optional; gibt die Conditionen an, WHERE spalte=wert; oder bei CREATE als Charset als string

als String:
'spalte="wert"'
'spalte="wert" AND spalte="wert"'
'spalte LIKE "%wert%"'

als Array:
['spalte' => 'wert']
['spalte' => 'wert', 'spalte' => '%wert%']
$order optional; gibt die Reihenfolge der Sortierung an, ORDER BY spalte ASC|DESC, oder bei CREATE TABLE als PRIMARY KEY als string

als String:
'spalte ASC'
'spalte ASC, spalte DESC'

als Array:
['spalte ASC', 'spalte DESC']
['spalte' => 'ASC', 'spalte' => DESC]
gibt den SQL Befehl als string aus; im Fehlerfall null
db::sql ('xenec', 'c');
db::sql ('xenec', 'c', null, 'utf8');
// CREATE DATABASE IF NOT EXISTS xenec DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
db::sql ('.docs', 'c', 'deviceId varchar(50) NOT NULL');
db::sql ('xenec.docs', 'c', 'deviceId varchar(50) NOT NULL', 'utf8', 'deviceId');
db::sql ('.docs', 'c', ['deviceId varchar(50) NOT NULL', 'sessionId text NOT NULL']);
db::sql ('.docs', 'c', ['deviceId' => 729820234, 'sessionId' => 'Id ist ungültig', 'ip' => true]);
// CREATE TABLE IF NOT EXISTS docs (deviceId int(20) NOT NULL, sessionId text NOT NULL, ip varchar(4) NOT NULL, PRIMARY KEY (deviceId)) ENGINE=InnoDB DEFAULT CHARSET=utf8
db::sql ('.datainfo', 's');
db::sql ('.datainfo', 's', 'id, var, users');
db::sql ('.datainfo', 's', ['id', 'var', 'users']);
db::sql ('.datainfo', 's', ['id' => 'wert1', 'var' => 'wert1', 'users' => 'wert1']);
db::sql ('.datainfo', 's', false, 'id="0ec3e499c703f8c7d8903bd26eb1fe47"');
db::sql ('.datainfo', 's', false, "id LIKE '%3e499c703%'");
db::sql ('.datainfo', 's', false, ['id' => '0ec3e499c703f8c7d8903bd26eb1fe47']);
db::sql ('public.user_agent', 's', 'user_agent, platform', ['browser' => 'Chrome', 'platform' => 'Android']);
db::sql ('public.user_agent', 's', 'user_agent, platform, browser', ['browser' => 'Chro%e', 'platform' => '%Win%']);
db::sql ('.user_agent', 's', false, false, 'browser_type ASC');
db::sql ('public.user_agent', 's', ['user_agent', 'platform', 'google'], ['browser="Chr"ome"', 'platform LIKE \'%Android\''], 'folder');
db::sql ('public.user_agent', 's', ['user_agent', 'platform', 'google'], ['browser="Chr"ome"', 'platform LIKE \'%Android\''], ['folder' => 'ASC', 'file' => 'DESC']);
db::sql ('public.user_agent', 's', ['user_agent', 'platform', 'google'], ['browser="Chr"ome"', 'platform LIKE \'%Android\''], ['folder ASC', 'file DESC']);
// SELECT user_agent, platform, google FROM user_agent WHERE browser="Chr\"ome" AND platform LIKE "%Android" ORDER BY folder ASC, file DESC
db::sql ('.files', 'i', 'id="90712335425"');
// INSERT INTO files SET id="90712335425"
db::sql ('.files', 'i', ['id="90712335425"', 'useragent=wert1']);
// INSERT INTO files SET id="90712335425", useragent="wert1"
db::sql ('.files', 'i', ['id' => 90712335425, 'useragent' => 'wert1']);
// INSERT INTO files (id, useragent) VALUES ("90712335425", "wert1")
db::sql ('.files', 'i', [['id' => 90712335425, 'useragent' => 'wert1'], ['id' => 43, 'useragent' => 'wert2']]);
// INSERT INTO files (id, useragent) VALUES ("90712335425", "wert1"), ("43", "wert2")
db::sql ('.user_agent', 'u', ['id' => '9071233\54"25', 'user_agent' => 'Test'], ['ip' => $device['ip']]);
db::sql ('public.test', 'u', ['useragent' => 'neu1', 'platform' => 'neu2', 'google' => 'neu3'], ['browser' => 'Chr"ome', 'platform' => '%Android']);
// UPDATE test SET useragent="neu1", platform="neu2", google="neu3" WHERE browser="Chr\"ome" AND platform LIKE "%Android"
db::sql ('.user_agent', 'd', false, ['ip' => $device['ip']]);
db::sql ('public.test', 'd', false, ['browser' => 'Chr"ome', 'platform' => '%Android']);
// DELETE FROM test WHERE browser="Chr\"ome" AND platform LIKE "%Android"
db::sql ('.files', 'd', false, ['id' => ['index', 'const']]);
// DELETE FROM files WHERE id IN ("index", "const")
db::sql ('.files', 'd', false, ['wert1 LIKE 1', 'wert2=2']);
// DELETE FROM files WHERE wert1 LIKE "1" AND wert2="2"
db::sql ('public.test', 't');
// TRUNCATE TABLE test
static db::encodeVal ($mixed $Value)
$Value Variable die umgewandelt werden soll
bereitet die Variable für ein SQL-Befehl vor, Objects und Arrays werden mit base64_encode() umgewandelt
echo 'INSERT INTO browser SET useragent='.db::encodeVal(['user' => 'Schumann, "Daniel"']);
// Ausgabe: INSERT INTO browser SET useragent="a:1:{s:4:\"user\";s:18:\"Schumann, \"Daniel\"\";}"

echo 'INSERT INTO browser SET useragent='.db::encodeVal('Schumann, "Daniel"');
// Ausgabe: INSERT INTO browser SET useragent="Schumann, \"Daniel\""
static db::decodeVal ($string $Value)
$Value Variable die umgewandelt werden soll
wandelt die Variable aus eine Datenbank in den entsprechenden Datentyp um, Datentypen werden automatisch erkannt, Objects und Arrays werden mit base64_decode() umgewandelt
$array = db::decodeVal('a:1:{s:4:"user";s:18:"Schumann, "Daniel"";}');
// Ausgabe: array('user' => 'Schumann, "Daniel"')
static db::getSpecification ($string $charset = null)
$charset Charset
gibt ein array mit den Spezifikationen zurück, die gesucht wurden ['Collation' => #COLLATION, 'Charset' => #CHARSET, 'Id' => #ID, 'Default' => #STANDART, 'Compiled' => #KOMPILIERT, 'Sortlen' => #SORTLEN]; im Fehlerfall null
print_r (db::getSpecification('ascii'));
static db::getLogin ([$string $object $dbTable = null])
$dbTable optional; gibt den Datenbank-ID und optional den Tabellennamen an 'public.browser'
'.browser' definiert die Tabelle browser der Standartdatenbank; bei null, wird die Standartdatenbank ausgegeben; oder ein neues new db () Object
gibt bei Erfolg ein array mit den dazugehörigen Logindaten zurück ['name' => #Datenbankname, 'host' => #HOST Adresse, 'user' => #Benutzer, 'pass' => #Passwort]; ansonsten wird null zurückgegeben
$login = db::getLogin();

if (!is_null($login))
  $mysqli = new mysqli($login['host'], $login['user'], $login['pass']);