Re: Stored procedures, PDO, and PHP issue - Mailing list pgsql-php

From Eric Chamberlain
Subject Re: Stored procedures, PDO, and PHP issue
Date
Msg-id 2AE0AB18-0F9D-4A32-92D3-4D86F176D432@zonarsystems.com
Whole thread Raw
In response to Re: Stored procedures, PDO, and PHP issue  (Andy Shellam <andy-lists@networkmail.eu>)
Responses Re: Stored procedures, PDO, and PHP issue  (Andy Shellam <andy-lists@networkmail.eu>)
List 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


pgsql-php by date:

Previous
From: Andy Shellam
Date:
Subject: Re: Stored procedures, PDO, and PHP issue
Next
From: Bill Moran
Date:
Subject: Re: Stored procedures, PDO, and PHP issue