Skip site navigation (1) Skip section navigation (2)

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: (view raw, whole thread or download thread mbox)
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,  
$stmt->bindValue(1, settype($userId, "integer"), PDO::PARAM_INT);
$stmt->bindValue(2, $hashPass, PDO::PARAM_STR);

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


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


pgsql-php by date

Next:From: Bill MoranDate: 2009-08-19 21:11:27
Subject: Re: Stored procedures, PDO, and PHP issue
Previous:From: Eric ChamberlainDate: 2009-08-19 20:47:06
Subject: Re: Stored procedures, PDO, and PHP issue

Privacy Policy | About PostgreSQL
Copyright © 1996-2017 The PostgreSQL Global Development Group