Eller till och med bara göra en "SELECT @id AS id"
sedan $row->id
kommer att fungera bra. Jag byter alltid namn på valda kolumner för att behålla namnet meningsfullt när det behövs :-)
BTW, du kan helt enkelt sammanfoga samtalet och välja @... (med en;-satsavgränsare) och RS kommer att vara det returnerade värdet. Tyvärr returnerar detta en multi-resultset och du måste spola hela uppsättningen annars kommer de efterföljande frågorna att stanna. Se följande exempel:
$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();
Alternativt lägg till markeringen i addNewUser och returnera en RS istället för 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
Den första returnerar en multiquery-uppsättning (NULL, RS) och den andra en (RS, NULL)-uppsättning, därför kan du använda ett enkelt query()-anrop som bäddar in det första fetch_object(), men du behöver fortfarande tömma RS-stacken.