O anche semplicemente fare un "SELECT @id AS id"
quindi $row->id
funzionerà bene. Rinomino sempre le colonne selezionate per mantenere il nome significativo quando necessario :-)
A proposito, puoi semplicemente concatenare la chiamata e selezionare @... (con un delimitatore di istruzione;) e RS sarà il valore restituito. Sfortunatamente questo restituisce un set di risultati multiplo ed è necessario svuotare il set completo altrimenti le query successive si bloccheranno. Vedi i seguenti esempi:
$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();
In alternativa, aggiungi select in addNewUser e restituisci un RS invece di 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
Il primo restituisce un set multiquery (NULL, RS) e il secondo un set (RS, NULL), quindi puoi usare una semplice chiamata a query() che incorpora il primo fetch_object(), ma devi comunque svuotare lo stack RS.