Dấu ngoặc kép được sử dụng trong SQL cho các ký tự chuỗi. Điều đó có nghĩa là điều này:
'$2'
chỉ là một chuỗi chứa các ký tự $
và 2
chứ không phải là một trình giữ chỗ. Nếu bạn muốn có một trình giữ chỗ, bạn cần bỏ dấu ngoặc kép:
$Query = pg_query_params($db, '...password=(crypt($2,password))...', array(33,'thepassword'));
Điều đó cung cấp cho bạn trình giữ chỗ thay vì chuỗi ký tự.