0
我想创建一个过程,可以注册用户一些非常非常基本的安全性。我做了一个程序,它工作得很好:Mysql存储过程错误1418
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权限(s)进行此操作0.031秒 但它说我需要超级用户权限...
我的猜测是我必须使用sp。
如何从sp的传出参数中获取值?
我正在通过c#windows应用程序访问此。如何从sp的CALL中获取它?
请帮助:)很多apreciated。
没有,之前运行下面的脚本,没有工作:(任何其他的想法? –
@MaticŠincek检查我的新的答案 – Viru
谢谢您答案,Viru,但这里是我发现的,你的答案可能会起作用,但由于我的托管计划,我没有特权 - 我无法创建函数,因此对于每个人都有这个消息。研究更多,证明Viru具有最好的解决方案,它可能会导致一些安全问题,第二种解决方案是将READS SQL DATA放在begin和function参数之间。 –