Huh! Yes, indeed ! But how is it possible ?! I see EMAIL = _EMAIL, EMAILID = _EMAILID,
rather than
EMAIL = $7, EMAILID = $8,
in the function definition...
My guess the reversal is taking place in the PHP code. The table definition and the argument list to the Pg function have one order for emailid,email and the update and insert statements have another; email,emailid. I would guess that the PHP is building the row variables using the SQL statement order and than passing that to the Pg function which has a different order.
Yeah, thats why I've asked the OP to post SQL with call of the function (in PHP).