Mysql存储过程错误1418

Mysql stored procedure error 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;

然后我想我会做一个 returns 的函数,这里是:

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 中获取它?

请帮忙 :) 非常感谢。

您在函数中有不允许的插入语句..您不能在函数内修改数据。函数必须是确定性的,这就是错误所说的。

为了 relax\suppress 此检查,您需要 运行 在执行您的函数之前遵循脚本

SET GLOBAL log_bin_trust_function_creators = 1;