Oder machen Sie einfach einen "SELECT @id AS id"
dann $row->id
wird gut funktionieren. Ich benenne ausgewählte Spalten immer um, um den Namen bei Bedarf aussagekräftig zu halten :-)
Übrigens können Sie den Aufruf einfach verketten und @... (mit einem;-Anweisungstrennzeichen) auswählen, und RS ist der zurückgegebene Wert. Leider gibt dies eine Mehrfach-Ergebnismenge zurück, und Sie müssen die gesamte Menge löschen, da sonst die nachfolgenden Abfragen ins Stocken geraten. Siehe folgende Beispiele:
$db->multi_query( "CALL addNewUser($name,$age,@id);SELECT @id as id" );
$db->next_result(); // flush the null RS from the call
$rs=$db->store_result(); // get the RS containing the id
echo $rs->fetch_object()->id, "\n";
$rs->free();
Alternativ fügen Sie select in addNewUser hinzu und geben ein RS anstelle von out param
zurück$rs = $db->query( "CALL addNewUser($name,$age)" );
echo $rs->fetch_object()->id, "\n";
$rs->close();
$db->next_result(); // flush the null RS from the call
Der erste gibt ein Multiquery-Set (NULL, RS) und das zweite ein (RS, NULL)-Set zurück, daher können Sie einen einfachen query()-Aufruf verwenden, der das erste fetch_object() einbettet, aber Sie müssen immer noch den RS-Stack leeren.