【发布时间】:2016-02-25 14:15:10
【问题描述】:
我想创建一个可以注册用户的程序,具有一些非常基本的安全性。我做了一个程序,效果很好:
DELIMITER //
CREATE PROCEDURE registriraj (vime varchar(50), vpriimek varchar(50), vemail varchar(100), vgeslo varchar(50), OUT ok varchar(1))
BEGIN
IF NOT EXISTS
(SELECT * FROM uporabniki WHERE email = vemail) THEN
IF (vime != '') AND (vpriimek != '') AND (vemail != '') AND (vgeslo != '')
THEN
INSERT INTO uporabniki (ime,priimek,email,geslo) VALUES (vime,vpriimek,vemail,vgeslo);
SET ok = 1;
ELSE SET ok = 0;
END IF;
END IF;
END; //
我猜我返回了一个值作为输出(ok varchar(1)),但是当我调用它时
CALL vstavi('ime','priimek','iemail','geslo',@out);
和
SELECT @out;
它在两种情况下都返回 null - true 或 false;
然后我想我会做一个返回的函数,它是:
DELIMITER **
CREATE FUNCTION register (vime varchar(50), vpriimek varchar(50), vemail varchar(100), vgeslo varchar(50))
RETURNS INT
BEGIN
IF NOT EXISTS (SELECT * FROM uporabniki WHERE email = vemail) THEN
IF (vime != '') AND (vpriimek != '') AND (vemail != '') AND (vgeslo != '') THEN
INSERT INTO uporabniki (ime,priimek,email,geslo) VALUES (vime,vpriimek,vemail,vgeslo);
RETURN 1;
ELSE RETURN 0;
END IF;
END IF;
END; **
但它给了我这个错误,我无法弄清楚。
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
我进行了研究并发现,解决这个问题的最佳方法是使用 sp,udf-s 更多用于选择数据等等......
也试过这个: 0 46 15:10:14 SET GLOBAL log_bin_trust_function_creators = 1 错误代码:1227。访问被拒绝;您需要(至少一个)此操作的 SUPER 权限 0.031 秒 但它说我需要超级用户权限...
我猜我必须使用 sp。
如何从 sp 的输出参数中获取值?
我正在通过一个 c# windows 应用程序访问它。如何从 sp 的 CALL 中获取?
请帮忙 :) 非常感谢。
【问题讨论】:
标签: c# mysql stored-procedures udf