Mas ai que está, não falei nada antes pra não confundir mas vamos la:
Quanto se usa funções de agrupamento (SUM, AVG, MAX, MIN, etc) sem usar group by, obrigatoriamente vc só trás um registro ok?
Logo, vc nem precisa do while pra pegar o registro…
$row = mysqli_fetch_assoc($result);
if ($row != null) {
print_r($row);
} else {
echo 'Sem registros na tabela!';
}
Sempre observe o retorno das funções que vc usa…
E para pesquisar, o banco usa um negócio chamado cursor e no php cada vez que usa o fetch_assoc vc pede mais um registro pro banco até chegar a nulo (null), ou seja, um indicador de que não tem mais registros a serem usados…
Agora analisando sua lógica, não deveria afetar em nada porque ele só entraria no while uma unica vez correto?
Eu ainda suspeito que possa ser bugs da api mysqli como um todo, estude um pouco de pdo, bem mais pratico (minha opinião) de mexer com banco, no seu caso olha o basico aqui:
$sql = 'SELECT MAX(id) AS id,token,latitude,longitude,altitude,data_hora FROM device WHERE token=?';
$pdo = new PDO('mysql:host=localhost;dbname=banco', 'usuario', 'senha');
$stmt = $pdo->prepare($sql);
$stmt->execute(array($token));
$temp_array = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($temp_array);
Bons estudos!
OBS: Código ajustado para quem tiver interesse…