La tua logica mysqli sembra a posto, ci sono alcuni esempi nel manuale PHP qui nel caso non li avessi visti.
Perché selezioni l'ID quando non lo consumi? Inoltre non è necessario associare un risultato quando verrà restituita solo una riga nel set di risultati completo poiché presumo accadrà in questo caso (ID è un indice univoco nella tabella), utilizzare get_result invece.
L'uso di mysqli prepare proteggerà da tutti gli attacchi di iniezione comuni, ma non da cose di stile 0-day che non sono ancora arrivate al driver.