Definiertes Update

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\Integer
    ('example-1', 'book-count'));

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

/**
 * Where-Abfrage definieren
 */
$statement->where(new \Alvine\Persistence\Relation\SQL\Where
    (new \Alvine\Persistence\Relation\Field\Varchar
    ('example-1', 'ISBN')));

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

$records->append(new \Alvine\Persistence\Relation\Record(
    ['ISBN'=>'478-1-86681-192-6', 'book-count'=>'199']));

$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:
     * UPDATE `example-1` SET `book-count`=199 
     *  WHERE `example-1`.`ISBN`='478-1-86681-192-6'
     */
} 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) {
    //print_r($resultSet);
    /** Gibt die Anzahl der betroffenen Datensätze zurückx */
    print_r($resultSet->getAffectedRows());
}

Kommentare