Le virgolette singole vengono utilizzate in SQL per le stringhe letterali. Ciò significa che questo:
'$2'
è solo una stringa che contiene i caratteri $
e 2
piuttosto che un segnaposto. Se vuoi un segnaposto, devi omettere le virgolette:
$Query = pg_query_params($db, '...password=(crypt($2,password))...', array(33,'thepassword'));
Questo ti dà il segnaposto anziché la stringa letterale.