Definiertes Insert

Die Abfrage über definierte Statements hat mehrere Vorteile. Zum einen können die einzelnen Felder über Objekte abgebildet werden und zum anderen werden diese Abfragen mittels Prepared Statements an die Datenbank gesendet.

/**
 * 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());

/**
 * Felddefinition festlegen
 */
$definition=new \Alvine\Persistence\Relation\Definition();
$definition->append(
    new \Alvine\Persistence\Relation\Field\Varchar('example-1', 'ISBN'));
$definition->append(
    new \Alvine\Persistence\Relation\Field\Integer('example-1', 'book-count'));
$definition->append(
    new \Alvine\Persistence\Relation\Field\Varchar('example-1', 'title'));
$definition->append(
    new \Alvine\Persistence\Relation\Field\Date('example-1', 'record'));

/**
 * Ein definiertes Statement bietet zum einen eine höhere Sicherheit 
 * und zum anderen eine optimierte Performance bei Mehrfachanfragen.
 */
$statement=new \Alvine\Persistence\Relation\SQL\Insert\DefinedStatement
    ($definition);

/**
 * Datensätze
 */
$records=new \Alvine\Persistence\Relation\Records();

$records->append(new \Alvine\Persistence\Relation\Record(
    ['ISBN'=>'478-1-86681-192-6', 'book-count'=>'22',
    'title'=>'My Title 1', 'record'=>(string) 
        new \Alvine\Date\Date(2017, 12, 31)]));
$records->append(new \Alvine\Persistence\Relation\Record(
    ['ISBN'=>'478-2-86681-192-6', 'book-count'=>'33',
    'title'=>'My Title 1', 'record'=>(string) 
        new \Alvine\Date\Date(2017, 12, 31)]));


$query=new \Alvine\Persistence\Relation\Query($statement, $records);

/**
 * Ausführen des Queries
 */
try {
    $result=$dataObject->execute($query);
    /**
     * Es werden folgende SQL-Anweisungen auf dem Server ausgeführt:
     * INSERT INTO `example-1` (`ISBN`,`book-count`,`title`,`record`) 
     *      VALUES ('478-1-86681-192-6',22,'My Title 1','2017-12-31')
     * INSERT INTO `example-1` (`ISBN`,`book-count`,`title`,`record`) 
     *      VALUES ('478-2-86681-192-6',33,'My Title 1','2017-12-31')
     */
} catch(\Exception $e) {
    exit-1;
}

if($result->containErrors()) {
    echo "FEHLER\r\n";
    echo (string) $result->getErrors();
    exit(1);
}
/**
 * Das Ergebnis des Queries ist eine Collection.
 */
foreach($result AS $resultSet) {
    /** Gibt die eingefügte ID zurück */
    print_r($resultSet->getLastInsertID());
}

/** EXAMPLE:END * */
echo "\n".$profiler->record('end')->getDuration();

Kommentare