【发布时间】:2013-12-23 21:45:15
【问题描述】:
我创建了一个函数,理论上应该在密码更改成功时返回 true,而在相反的情况下返回 false。
函数定义为:
CREATE OR REPLACE FUNCTION database."changePassword"(username character varying, newpassword character varying, oldpassword character varying) RETURNS boolean AS
$BODY$
UPDATE database.users SET hash = MD5($2) WHERE (username = $1 AND hash = MD5($3));
SELECT EXISTS(SELECT 1 FROM datsabase.users WHERE username = $1 AND hash = MD5($2))
$BODY$
LANGUAGE sql VOLATILE NOT LEAKPROOF
COST 100;
问题是,当我调用SELECT database."changePassword"('usrNm', 'newPassword', 'oldOne');这样的函数时,一开始我得到了预期的true,并且数据库中的值发生了变化。
当我使用相同的参数再次(一次又一次)调用该函数时,它也返回 true,但由于密码现在已更改,并且通过函数调用发送的旧密码不正确,因此不应出现这种情况。
我做错了吗?
PostgreSQL 版本是 9.3.1。
我已经从 pgAdmin 界面和 PHP 脚本调用了该函数,同样的问题。
【问题讨论】:
标签: sql postgresql sql-update user-defined-functions plpgsql