To lze provést jedním dotazem
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Všimněte si, že char je vyhrazené slovo, takže bude muset být zabaleno do zadních znamének. Možná je to skutečný problém, na který jste narazili (chyba syntaxe), spíše než problém s vaší smyčkou while. Nicméně jeden dotaz je tou správnou cestou