Единичните кавички се използват в SQL за низови литерали. Това означава, че това:
'$2'
е просто низ, който съдържа знаците $
и 2
а не заместител. Ако искате контейнер, трябва да оставите кавичките:
$Query = pg_query_params($db, '...password=(crypt($2,password))...', array(33,'thepassword'));
Това ви дава заместителя вместо литерала на низа.