gpt4 book ai didi

php - 如何在 postgresql 中编写存储过程并在 php 代码中调用?

转载 作者:行者123 更新时间:2023-11-29 13:39:24 24 4
gpt4 key购买 nike

我想在名为 trail 的表上编写一个过程,其中所有事务都存储了与有效登录尝试和无效登录尝试相关的信息。我想计算如果同一个用户尝试 5 次无效尝试,那么它会阻塞 5 分钟。

我正在使用这个查询

"select count(*) from trail where username='$username' and date='$todaydate'"
if($count>5)
{
//redirect to blockpage
}
else
{
//check for password and

//redirect to dashboard
}

输出:

轨迹表数据

date    Userid  Blocktime   Validlogin
--------------------------------------
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc 26-08-2019 12:04:08 0
26-08-2019 Abc Null 1
26-08-2019 Abc Null 0
26-08-2019 Abc 26-08-2019 12:09:08 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc 26-08-2019 12:13:00 0

当我使用上面的查询时,它只对前五个交易起作用,之后它将计算该用户的旧交易,并更新 block 时间

表结构

date    Userid  Blocktime   Validlogin
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc 26-08-2019 12:04:08 0
26-08-2019 Abc Null 1
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc Null 0
26-08-2019 Abc 26-08-2019 12:04:08 0

其实我想要这个表结构使用存储过程

最佳答案

这将满足您的要求。它是一个函数而不是一个过程,但该过程无法返回任何东西,所以可能不是您想要的。

CREATE OR REPLACE FUNCTION testfunc(
p_username VARCHAR(64)
) RETURNS BOOLEAN
LANGUAGE plpgsql
AS $$
DECLARE
l_attempts integer;
BEGIN

SELECT COUNT(*)
INTO l_attempts
FROM trail
WHERE 1=1
AND user_name = p_username
AND log_time >= now()::date;


IF l_attempts > 5 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;

END;
$$;

在 PHP 中调用此函数,如果它返回 true,则应阻止用户登录。

select testfunc('sumituser');

关于php - 如何在 postgresql 中编写存储过程并在 php 代码中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57661509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com