Einfache Anführungszeichen werden in SQL für Zeichenfolgenliterale verwendet. Das bedeutet, dass dies:
'$2'
ist nur ein String, der die Zeichen $ enthält und 2 eher als Platzhalter. Wenn Sie einen Platzhalter wünschen, müssen Sie die Anführungszeichen weglassen:
$Query = pg_query_params($db, '...password=(crypt($2,password))...', array(33,'thepassword'));
Das gibt Ihnen den Platzhalter anstelle des String-Literals.