From: | Eric Chamberlain <Eric(dot)Chamberlain(at)zonarsystems(dot)com> |
---|---|
To: | Andy Shellam <andy-lists(at)networkmail(dot)eu> |
Cc: | "pgsql-php(at)postgresql(dot)org" <pgsql-php(at)postgresql(dot)org> |
Subject: | Re: Stored procedures, PDO, and PHP issue |
Date: | 2009-08-19 20:58:04 |
Message-ID: | 2AE0AB18-0F9D-4A32-92D3-4D86F176D432@zonarsystems.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-php |
> Hi Eric,
>
> What about setting your SQL text to use $1 and $2 as the parameter
> values? I'm currently doing this in the C API (as I type this!) so
> not
> sure if this will work in PHP PDO.
>
> $stmt = $db->prepare("SELECT is_password_expired($1::integer,
> $2::varchar)");
>
Unfortunately this does not work or I maybe doing it wrong. New code:
$stmt = $db->prepare("SELECT is_password_expired($1::integer,
$2::varchar);
$stmt->bindValue(1, settype($userId, "integer"), PDO::PARAM_INT);
$stmt->bindValue(2, $hashPass, PDO::PARAM_STR);
$stmt->execute();
> When you say "this completely fails" - in what respect? What errors
> do
> you get?
I get a blank screen. I've tried setting the error reporting level to:
error_reporting(E_ALL);
before calling the above code. Our servers are configured to display
errors, etc. The fact that it just goes blank tells me there is a
bigger issue going on.
> Also have you tried making sure your PHP $userId is an integer
> not a string - e.g. settype($userId, 'integer'); Again I'm not sure
> if
> this has a bearing on the PDO stuff as I've never used it.
>
Yes, I have tried settype hoping that would somehow make PDO use the
right one.
> Regards,
> Andy
>
>
> Eric Chamberlain wrote:
>> I'm having an issue calling a specific stored proc using PHP and PDO.
>> I have two procs with the same name and same number of parameters.
>> However, the parameter types are different. When the below code is
>> called in PHP it always calls the varchar, varchar proc. I can not
>> get it to call the integer, varchar proc.
>>
>> Stored procedure definitions:
>> boolean is_password_expired(i_user varchar, i_pass varchar)
>> boolean is_password_expired(i_user_id integer, i_pass varchar)
>>
>> $stmt = $db->prepare("SELECT is_password_expired(?, ?)");
>> $stmt->bindValue(1, $userId, $hashPass, PDO::PARAM_INT);
>> $stmt->execute();
>>
>> This always returns false because it's passing the $userId, of say
>> "1", to the varchar, varchar proc. I've tried using the following:
>>
>> $stmt = $db->prepare("SELECT is_password_expired(?::integer,
>> ?::varchar)");
>>
>> This completely fails.
>>
>> $stmt->bindParam(1, $userId, $hashPass, PDO::PARAM_INT);
>>
>> Same as bindValue result.
>>
>> $stmt->execute(array($userId, $hashPass));
>>
>> Same result.
>>
>> Is there some way to inform PDO and Postgresql that I plan on using
>> the integer, varchar proc? If so, how do I do this? Thanks all!
>>
>> Eric
>>
From | Date | Subject | |
---|---|---|---|
Next Message | Bill Moran | 2009-08-19 21:11:27 | Re: Stored procedures, PDO, and PHP issue |
Previous Message | Eric Chamberlain | 2009-08-19 20:47:06 | Re: Stored procedures, PDO, and PHP issue |