Pauli: Return Wert von UPDATE

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).

  1. 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?

  2. 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!

  1. Hi,

    1. 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?

    so sagt es zumindest das PHP-Handbuch.

    1. 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

    --
    "Was sind denn das für Beeren?" - "Das sind Blaubeeren." - "Warum sind sie dann rot?" - "Weil sie noch grün sind."
  2. 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

    --
    sumpsi - posui - obstruxi
    1. 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! 👍