O simplemente haga un "SELECT @id AS id"
entonces $row->id
funcionará bien. Siempre cambio el nombre de las columnas seleccionadas para mantener el nombre significativo cuando sea necesario :-)
Por cierto, simplemente puede concatenar la llamada y seleccionar @... (con un delimitador de instrucción;) y el RS será el valor devuelto. Desafortunadamente, esto devuelve un conjunto de resultados múltiples y debe vaciar el conjunto completo; de lo contrario, las consultas posteriores se detendrán. Vea los siguientes ejemplos:
$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, agregue la selección en addNewUser y devuelva un RS en lugar de un parámetro
$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
El primero devuelve un conjunto de consultas múltiples (NULL, RS) y el segundo un conjunto (RS, NULL), por lo tanto, puede usar una llamada simple query() que incrusta el primer fetch_object(), pero aún necesita vaciar la pila RS.