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參數之間。 –