Vaše logika mysqli se zdá být v pořádku, některé příklady jsou v příručce PHP zde v případě, že jste je neviděli.
Proč ale vybíráte ID, když ho nespotřebováváte? Také ve skutečnosti nemusíte vázat výsledek, když se má vrátit pouze jeden řádek v úplné sadě výsledků, jak předpokládám, že se to stane v tomto případě (ID je jedinečný index v tabulce), použijte get_result místo toho.
Použití mysqli Prepare ochrání před všemi běžnými injekčními útoky, ale ne před věcmi ve stylu 0 dnů, které se ještě nedostaly k ovladači.