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.