SQL-Query Update über PHP

Um nun in PHP ein SQL-Update-Query anzuwenden erstellt man die SQL-Anweisung und übergibt diese dem schon kennen gelernten query-Befehl

$db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
             WHERE id='2' LIMIT 1");

Wird dies ausgeführt bekommen wir keinerlei Rückmeldung. Schauen wir über phpMyAdmin in die entsprechende Tabelle, sehen wir, dass es erfolgreich war.

Wir können jetzt natürlich versuchen (und ich schreibe hier bewusst VERSUCHEN) die Anzahl der betroffenen Datensätze zu ermitteln. Von der Logik her sehen die entsprechenden Anweisungen dann so aus:

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
                       WHERE id='2' LIMIT 1");
echo $update->num_rows;

Allerdings bekommen wir keine Rückmeldung (auch nicht die Anzahl der betroffenen Datensätze), obwohl es Erfolgreich war.

Schauen wir uns also an, was über print_r im Rückgabewert steckt:

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
                       WHERE id='2' LIMIT 1");
print_r($update);

Als Ergebnis erhalten wir auf dem Bildschirm die Ausgabe

1

Wir erhalten hier also als Rückmeldung „1“. Ändern wir in der Anweisung z.B. den Wert der „id“ auf einen nicht existierenden Datensatz:

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
                       WHERE id='222' LIMIT 1");
print_r($update);

Jetzt erhalten wir als Rückgabe: NICHTS

Und das ist korrekt so. Lassen wir uns über var_dump($update) den Rückgabewert ausgeben, erhalten wir zusätzlich den Variablentyp. Und so kommt Licht in die Sache:

Als Rückgabewert erhalten wir bei einer erfolgreich ausgeführten SQL-Anweisung:

bool(true)

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
                       WHERE id='2' LIMIT 1");
var_dump($update);

Bei einer nicht erfolgreich ausgeführten SQL-Anweisung kommt NICHTs

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
                       WHERE id='222' LIMIT 1");
var_dump($update);

Wir bekommen also über die query keine Daten – aber wir bekommen die wünschten Daten von dem Objekt über andere Möglichkeiten. Bei Objekten funktioniert es über die Anweisung affected_rows.

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00' 
                       WHERE id='2' LIMIT 1");
echo $db->affected_rows;

Jetzt erhalten wir als Ergebnis wieder 1. Damit ist diesmal die Anzahl gemeint. Wenn wir unsere Update-SQL-Anweisung ändern, wird das schön sichtbar. Wir Updaten jetzt alle vorhandenen Datensätze (einfach die WHERE-Anweisung und das LIMIT entfernen.

$update = $db->query("UPDATE kontakte SET erstellt='2016-12-25 21:00:00'");
echo $db->affected_rows;

Jetzt bekommen wir als Ergebnis 2 – alle unsere vorhandenen Datensätze wurden geändert.

Exkursion: aktuelles Datum

Möchte man das aktuelle Datum eintragen, gibt es eine SQL-Anweisung dafür: NOW()

Unsere komplette Anweisung sieht dann wie folgt aus:

$update = $db->query("UPDATE kontakte SET erstellt=NOW() ");
echo $db->affected_rows;

Somit sollten nur alle Datensätze das aktuelle Datum haben. Wenn wir es in phpMyAdmin kontrollieren, sieht man die Auswirkungen von NOW()