Non ton erreur n'était pas là.
Tu peux utiliser des marqueurs défini mais il faut les utiliser correctement.
l'exemple de la doc indique qu'il faut utiliser : et tu utilisais $ ce qui est le marqueur d'une variable php.
Du coup PHP interprètait ta requète en remplacant les variable (avec $) par leur valeur. Du coup prepare ne détectait plus aucun marqueur et execute plantait car tu lui en donnait.