Или дори просто направете "SELECT @id AS id"
след това $row->id
ще работи добре. Винаги преименувам избрани колони, за да запазя името смислено, когато е необходимо :-)
BTW, можете просто да конкатенирате повикването и да изберете @... (с разделител на израза;) и RS ще бъде върнатата стойност. За съжаление това връща множество резултати и трябва да изчистите пълния набор, в противен случай следващите заявки ще спрат. Вижте следните примери:
$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();
Алтернативно добавете select към addNewUser и върнете RS вместо 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
Първият връща набор от множество заявки (NULL, RS), а вторият набор (RS, NULL), следователно можете да използвате просто извикване на query(), което вгражда първия fetch_object(), но все пак трябва да изчистите стека на RS.