Ou até mesmo faça um
"SELECT @id AS id"
então $row->id
funcionará bem. Eu sempre renomeio colunas selecionadas para manter o nome significativo quando necessário :-) BTW, você pode simplesmente concatenar a chamada e selecionar @... (com um delimitador de instrução;) e o RS será o valor retornado. Infelizmente, isso retorna um mutli-resultset e você precisa liberar o conjunto completo, caso contrário, as consultas subsequentes serão interrompidas. Veja os seguintes exemplos:
$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();
Alternativamente, adicione o select no addNewUser e retorne um RS em vez de 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
O primeiro retorna um conjunto multiquery (NULL, RS) e o segundo um conjunto (RS, NULL), portanto, você pode usar uma chamada query() simples que incorpora o primeiro fetch_object(), mas ainda precisa liberar a pilha RS.