Hier der Codeteil mit der Abfrage:
PHP-Code:
// Abfrage
$result = $dewis->Abfrage($param);
// Mit dem Ergebnis der Abfrage wird jetzt die Datenbank aktualisiert
foreach($result->members as $m)
{
$set = array
(
'nachname' => $m->surname,
'vorname' => $m->firstname,
'titel' => $m->title,
'geschlecht' => ($m->gender == 'm') ? 'M' : ($m->gender == 'f' ? 'W' : strtoupper($m->gender)),
'zpsver' => $m->vkz,
'zpsmgl' => $m->membership,
'status' => ($m->state == '') ? 'A' : $m->state,
'dwz' => $m->rating,
'dwzindex' => $m->ratingIndex,
'fideelo' => $m->elo,
'fidetitel' => $m->fideTitle,
'elobase' => '',
);
// Update der Tabelle
$objSpieler = \Database::getInstance()->prepare('UPDATE tl_dwz_spi %s WHERE dewis_id = ?')
->set($set)
->execute($m->pid);
// Abfrage, ob ein Update erfolgte oder nicht
$status = $objSpieler->affectedRows;
echo "Status: $status (".$m->surname.",".$m->firstname.")<br>";
}
Die Tabelle tl_dwz_spi ist vor dem ersten Update noch relativ jungfräulich. Es gibt die contaoeigenen Felder id und tstamp und ansonsten nur eigene Felder. tstamp ist nach dem Erstimport noch leer. Das Feld dewis_id ist eigentlich "unique", bei vielen Datensätzen aber auch leer.
In dem Code aktualisiere ich die Tabelle nun mit Daten aus einer SOAP-Abfrage ($result = $dewis->Abfrage ...). Beim ersten Durchlauf meldet mir affectedRows korrekt 1 oder 0 betroffene Datensätze und ich könnte entsprechend ein INSERT vornehmen, um neue Datensätze mit noch unbekannter dewis_id hinzuzufügen.
Wenn ich jetzt meine Seite aktualisiere und noch einmal die gleichen Daten der SOAP-Abfrage durchjage, meldet mir affectedRows bei jedem Datensatz 0. Es wurde nichts von Contao verändert, obwohl zumindest tstamp geändert werden müßte. An dieser Stelle kann ich also nicht mehr unterscheiden, ob das Update nicht erfolgt ist, weil a) nichts Neues dazugekommen ist oder b) die 0 geliefert wird, weil der Datensatz nicht vorhanden ist.
Lesezeichen