Logika mysqli Anda tampaknya baik-baik saja, ada beberapa contoh di manual PHP di sini jika Anda belum melihatnya.
Mengapa Anda memilih ID saat tidak mengkonsumsinya? Anda juga tidak benar-benar perlu mengikat hasil ketika itu hanya akan mengembalikan satu baris dalam set hasil lengkap karena saya berasumsi akan terjadi dalam kasus ini (ID adalah indeks unik dalam tabel), gunakan get_result sebagai gantinya.
Menggunakan persiapan mysqli akan melindungi dari semua serangan injeksi umum tetapi bukan hal-hal gaya 0-hari yang belum sampai ke driver.