Запрос функции дайджеста Postgresql внутри процедуры работает на чистом php, но не работает с Laravel - PullRequest
0 голосов
/ 29 марта 2019

Недавно я создал хранимую процедуру в Postgres SQL, которая занимается хешированием паролей. При использовании через инструмент PgAdmin он работает как брелок, как указано ниже.

Я также установил расширение pgcrypto.

SELECT horeca_user.update_token(
    1, //user_id
    1, //type
    'sdsfsdfs' //token
)

Работает при вызове через pgadmin , но не внутри приложения laravel , как указано ниже.

$token=\DB::select("SELECT * from \"horeca_user\".update_token('$type', '$user_id', '$token')");

и, наконец, это мой код процедуры

CREATE OR REPLACE FUNCTION horeca_user.update_token(tp integer,userid integer,token character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql' VOLATILE
    PARALLEL UNSAFE
    COST 100
AS $BODY$ 
DECLARE uid INTEGER;
DECLARE tok character varying;
BEGIN
    uid:=0;
    Select count(*) as total from horeca_user.user_tokens where user_id=$2 into uid;

    if uid=0 THEN
       Insert into horeca_user.user_tokens(id, user_id, tip) values($3, $2, $1);
     else
       Update horeca_user.user_tokens set id=$3, tip=$1 where user_id=$2;
     END IF;

     SELECT encode(digest(token, 'sha256'), 'hex') as tt into tok;

     return tok;
END

$BODY$;

Но этот код с чистым PHP работает как положено.

$db = new PDO("pgsql:dbname=Horecami;host=127.0.0.1", "postgres", "1" );
$sql = 'Select horeca_user.update_token(?, ?, ?)';
$stmt = $db->prepare($sql);
$type=1;
$id=1;
$z='az';
$stmt->bindValue(1, $type, PDO::PARAM_INT);
$stmt->bindValue(2, $id, PDO::PARAM_INT);
$stmt->bindValue(3, $z, PDO::PARAM_STR);
$stmt->execute();
$res=$stmt->fetchAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...