mysql 程序检查条目是否存在
mysql procedure check if entry exists
我需要一个程序来告诉我条目是否存在,这样我就知道我是否有权限。
CREATE DEFINER=`root`@`localhost` procedure `checkPermission`(tbl varchar(50), id int, userid int, out b boolean)
begin
set @q = concat("select idtblUsers into @rs from ", tbl, " where id", tbl, '=', id, ' && idtblUsers=', userid);
prepare stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
if @rs is not null then
select true into b;
else
select false into b;
end if;
END$$
call checkPermission('tblProjects', 2, 1, @b)
它总是 returns 1 in mysql-workbench 即使它说没有数据(警告 1329)如果没有条目(我没有允许)。但我想在@b 中返回 true 或 false。
请试试这个简化版。
主要问题是DEFINER=root@localhost
。这将使用 root@localhost 拥有的权限执行该过程。由于他很可能拥有所有权利,他不会 运行 进入权限限制。因此,要么删除它并使用受限用户创建过程,要么将其更改为 DEFINER=restricted_user@host
.
exists()
也是更好的选择,因为它会在找到条目后立即停止。
CREATE procedure `checkPermission`(tbl varchar(50), id int, userid int, out b boolean)
begin
set @q = concat("select exists(select 'whatever' into b from ", tbl, " where id", tbl, '=', id, ' && idtblUsers=', userid, ')');
prepare stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END$$
它几乎完成了工作,但这是对我有用的
CREATE procedure `checkPermission`(tbl varchar(50), id int, userid int, out b boolean)
begin
set @q = concat("select exists( select idtblUsers from ", tbl, " where id", tbl, '=', id, ' && idtblUsers=', userid, ') into @b ');
prepare stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
select @b into b;
END$$
我需要一个程序来告诉我条目是否存在,这样我就知道我是否有权限。
CREATE DEFINER=`root`@`localhost` procedure `checkPermission`(tbl varchar(50), id int, userid int, out b boolean)
begin
set @q = concat("select idtblUsers into @rs from ", tbl, " where id", tbl, '=', id, ' && idtblUsers=', userid);
prepare stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
if @rs is not null then
select true into b;
else
select false into b;
end if;
END$$
call checkPermission('tblProjects', 2, 1, @b)
它总是 returns 1 in mysql-workbench 即使它说没有数据(警告 1329)如果没有条目(我没有允许)。但我想在@b 中返回 true 或 false。
请试试这个简化版。
主要问题是DEFINER=root@localhost
。这将使用 root@localhost 拥有的权限执行该过程。由于他很可能拥有所有权利,他不会 运行 进入权限限制。因此,要么删除它并使用受限用户创建过程,要么将其更改为 DEFINER=restricted_user@host
.
exists()
也是更好的选择,因为它会在找到条目后立即停止。
CREATE procedure `checkPermission`(tbl varchar(50), id int, userid int, out b boolean)
begin
set @q = concat("select exists(select 'whatever' into b from ", tbl, " where id", tbl, '=', id, ' && idtblUsers=', userid, ')');
prepare stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END$$
它几乎完成了工作,但这是对我有用的
CREATE procedure `checkPermission`(tbl varchar(50), id int, userid int, out b boolean)
begin
set @q = concat("select exists( select idtblUsers from ", tbl, " where id", tbl, '=', id, ' && idtblUsers=', userid, ') into @b ');
prepare stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
select @b into b;
END$$