Re: Stored procedures, PDO, and PHP issue

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
>>

In response to

Responses

Browse pgsql-php by date

  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