Zum Inhalt

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');

Einfache Abfrage

In dem ersten Beispiel wird eine einfache SQL-Abfrage auf die Beispieldatenbank durchgeführt. Bei dieser Abfrage wird das SQL-Statement direkt an die Datenbank gesendet.

Sicherheitshinweis

Bei dieser Variante muss der Entwickler dafür sorge tragen, dass keine Daten aus dem Userland in das Query eingeschleust werden.

/**
 * 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\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
     *         )
     * 
     * )
     */
}