Return Wert von UPDATE
Pauli
- php
- sql
0 Der Martin0 Rolf B0 Pauli
Hallo,
Bin ein wenig verwirrt bezüglich des Return Wert eines SQL UPDATE Statements...
...habe ein Prepared Statement, das in der Datenbank gewisse Werte updatet. Das funktioniert auch ordnungsgemäß (die Werte werden in der Datenbank wie erwartet angepasst).
Liege ich richtig in der Annahme dass mysqli_stmt_execute($MEINstatement)
nur dann true zurückgibt, wenn der UPDATE Prozess in der Datenbank erfolgreich war / bzw. kann ich mit if(!mysqli_stmt_execute($MEINstatement))
evaluieren, ob der Prozess nicht erfolgreich war?
Zitat aus den DOCs: UPDATE returns the number of rows that were actually changed. Dies scheint aber abstruserweise nicht der Fall zu sein, denn ich kann das Ergebnis nicht "auffangen":
$res = mysqli_stmt_get_result($MEINstatement);
if(!$res) {
trigger_error(...);
// Dieser Fehler wird ausgelöst - daher scheint es KEIN $res zu geben (müsste laut DOCs bei z.B. EINER geänderten Reihe "1" sein...?)
}
Vielen Dank!
Hi,
- Liege ich richtig in der Annahme dass
mysqli_stmt_execute($MEINstatement)
nur dann true zurückgibt, wenn der UPDATE Prozess in der Datenbank erfolgreich war / bzw. kann ich mitif(!mysqli_stmt_execute($MEINstatement))
evaluieren, ob der Prozess nicht erfolgreich war?
so sagt es zumindest das PHP-Handbuch.
- Zitat aus den DOCs: UPDATE returns the number of rows that were actually changed. Dies scheint aber abstruserweise nicht der Fall zu sein, denn ich kann das Ergebnis nicht "auffangen":
Du verwechselst hier SQL und die PHP-Funktionen, die mit SQL hantieren. Anscheinend fragt mysqli_execute() das Ergebnis der SQL-Aktion ab und liefert true, wenn dieses Ergebnis ungleich Null ist.
Einen schönen Tag noch
Martin
Hallo Pauli,
$res = mysqli_stmt_get_result($MEINstatement);
This method should be called only for queries which produce a result set.
UPDATE produziert kein result set. Das tut nur SELECT (oder das Ausführen einer Routine, in der ein SELECT steht). Deswegen liefert die Funktion einen Fehler. Verwende mysqli_stmt_execute. Das liefert true oder false.
Ob ein UPDATE, der keinen Satz ändert, ebenfalls false liefert, weiß ich gerade nicht, das müsste ich ausprobieren. Ich würde aber erwarten, dass true zurückkommt und false nur dann, wenn das Statement an sich fehlerhaft ist.
Die Anzahl der geänderten Sätze bekommst Du jedenfalls mit mysqli_stmt_affected_rows.
Rolf
Ja nein oh Mann, ich bin zu blöd, das selber nachzulesen 🤦
Steht sogar relativ eindeutig in den offiziellen DOCs:
For successful queries which produce a result set, such as SELECT, SHOW, DESCRIBE or EXPLAIN, mysqli_stmt_get_result() will return a mysqli_result object. For other successful queries, mysqli_stmt_get_result() will return false.
Sorry für diese Unnötigkeit - aber danke für eure Hingabe! 👍