Недавно я создал хранимую процедуру в 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();