Lub nawet po prostu wykonaj "SELECT @id AS id"
następnie $row->id
będzie działać dobrze. Zawsze zmieniam nazwy wybranych kolumn, aby w razie potrzeby nazwa była znacząca :-)
BTW, możesz po prostu połączyć wywołanie i wybrać @... (z ogranicznikiem instrukcji;), a RS będzie zwróconą wartością. Niestety, to zwraca zestaw mutli-resultset i musisz opróżnić cały zestaw, w przeciwnym razie kolejne zapytania zostaną zatrzymane. Zobacz następujące przykłady:
$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();
Alternatywnie dodaj zaznaczenie do addNewUser i zwróć RS zamiast out param
$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
Pierwszy zwraca zestaw wielu zapytań (NULL, RS), a drugi zestaw (RS, NULL), stąd możesz użyć prostego wywołania query(), które osadza pierwsze fetch_object(), ale nadal musisz opróżnić stos RS.