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;
我想创建一个程序,可以使用一些非常非常基本的安全性来注册用户。我做了一个程序,它运行良好:
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;