Re: Stored procedures, PDO, and PHP issue

Поиск
Список
Период
Сортировка
От Eric Chamberlain
Тема Re: Stored procedures, PDO, and PHP issue
Дата
Msg-id 2AE0AB18-0F9D-4A32-92D3-4D86F176D432@zonarsystems.com
обсуждение исходный текст
Ответ на Re: Stored procedures, PDO, and PHP issue  (Andy Shellam <andy-lists@networkmail.eu>)
Ответы Re: Stored procedures, PDO, and PHP issue
Список 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 по дате отправления:

Предыдущее
От: Andy Shellam
Дата:
Сообщение: Re: Stored procedures, PDO, and PHP issue
Следующее
От: Bill Moran
Дата:
Сообщение: Re: Stored procedures, PDO, and PHP issue