Relationale Datenbanken¶
Der Zugriff auf relationale Datenbanken ist eine Kernfunktion von Webanwendungen. Mit Hilfe des Frameworks wird ein für das Framework optimierter Zugriff auf das darunterliegende PDO gewährt.
Für die folgenden Beispiele ist eine gesonderte Tabelle in einer Datenbank notwendig. In dieser Datenbank muss die Tabelle example-1
angelegt werden. Diese Tabelle kann über die folgenden SQL-Anweisungen in einer relationalen Datenbank wie MySQL oder SQLite
angelegt werden.
Beispieldatenbank anlegen¶
CREATE TABLE `example-1` (
`ISBN` varchar(17) COLLATE utf8mb4_unicode_ci
NOT NULL COMMENT '13 stellige ISBN Nummer des Buches',
`title` varchar(45) COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT 'Titel des Buches',
`record` datetime DEFAULT NULL
COMMENT 'Datum der Anlage des Datensatzes',
`book-count` int(11) DEFAULT NULL
COMMENT 'Anzahl der Bücher dieser ISDN im Lager',
`ID` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`),
UNIQUE KEY `ISBN_UNIQUE` (`ISBN`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Testdatenbank für Dokumentation';
INSERT INTO `example-1`
(`ISBN`, `title`, `record`, `book-count`)
VALUES ('978-3-86680-192-9', 'Stadt und Landkreis Hof',
'2016-12-12 00:00:00', '99');
659e37e7-1b3e-44e4-d455-5177ae789e14
/**
* Datenquelle/DataSource erstellen
*/
$dsn=new \Alvine\Persistence\Provider\MySQL\DataSource
($host, $port, $database, $table, $user, $password, $parameter);
/**
* Datenobjekt mit der Verbindung zum Datenbankserver
*/
$dataObject=new \Alvine\Persistence\Relation\SQL\DataObject
($dsn, new \Alvine\Types\Map\SimpleMap());
/**
* Ausführen des Queries
*/
$result=$dataObject->execute(
"SELECT * FROM `example-1` ".
" WHERE `ISBN`='978-3-86680-192-9'");
/**
* Es wird folgende SQL-Anweisung auf dem Server ausgeführt:
* SELECT * FROM `example-1` WHERE `ISBN`='978-3-86680-192-9'
*/
if($result->containErrors()) {
echo "FEHLER\r\n";
echo (string) $result->getErrors();
exit(1);
}
/**
* Das Ergebnis des Queries ist eine Collection der einzelnen Ergebnisse.
*/
foreach($result AS $resultSet) {
$data=$resultSet->getData();
print_r($data);
/**
* Dies ergibt folgende Ausgabe
*
* Array
* (
* [0] => Array
* (
* [ISBN] => 978-3-86680-192-9
* [title] => Stadt und Landkreis Hof
* [record] => 2016-12-12 00:00:00
* [book-count] => 99
* [ID] => 1
* )
*
* )
*/
}
/** EXAMPLE:END * */
echo "\n".$profiler->record('end')->getDuration();