SQLでは、文字列リテラルに一重引用符が使用されます。つまり、これは次のことを意味します:
'$2'
$
の文字を含む単なる文字列です および2
プレースホルダーではなく。プレースホルダーが必要な場合は、引用符を省略する必要があります:
$Query = pg_query_params($db, '...password=(crypt($2,password))...', array(33,'thepassword'));
これにより、文字列リテラルではなくプレースホルダーが得られます。