Votre code essaie d'utiliser une variable de liaison pour remplacer un mot-clé SQL ainsi qu'un nombre. Vous ne pouvez pas faire ça™.
Lorsque j'ai résolu ce problème, j'ai traduit mes intervalles de temps en secondes puis utilisé
CURDATE() - INTERVAL :seconds SECONDS
Au fait, CURDATE() vous donne minuit aujourd'hui. Vous voudrez peut-être NOW() à la place si vous gérez des intervalles inférieurs à un jour.