2017-07-01 4 views
-1

Ich schrieb eine MYSQL-Prozedur für meine Benutzerregistrierungsseite, ich habe bereits den PHP-Teil geschrieben, um Daten von dort an MySQL zu senden, und es funktioniert gut (mit Dummy-Daten versucht und Abruf). Aber es gibt eine Art von Problem mit meinem Handler oder Transaktion IMySQL sagte 1064 Sie haben einen Fehler in Ihrer SQL-Syntax

erraten

Das ist mein Vorgehen:

BEGIN 
DECLARE unamec INT; 
DECLARE emailc INT; 
DECLARE m INT; 
DECLARE msg VARCHAR(100); 
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET m=1; 
    START TRANSACTION; 
    SET autocommit=0; 
    SELECT COUNT(*) INTO unamec FROM login WHERE uname=`@user`; 
    IF unamec=0 THEN 
     SELECT COUNT(*) INTO emailc FROM login WHERE [email protected]; 
     IF emailc=0 THEN 
      INSERT INTO login (uname, hash, email, role) values(@user,MD5(@password),@email,'1'); 
      SET msg='Successfully Registered'; 
     ELSE 
      SET msg='Email Already Exists'; 
     END IF; 
    ELSE 
     SET msg='Username Already Exists'; 
    END IF; 
COMMIT; 
END; 
END; 
IF m=1 THEN 
ROLLBACK; 
SET msg='ERROR'; 
END IF; 
SELECT msg as message; 
END 

bekomme ich immer die Fehler

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
'END; 
IF m=1 THEN 
ROLLBACK; 
SET msg='ERROR'; 
END IF; 
SELECT msg as message;' at line 23 

Gibt es etwas offensichtlich, dass ich fehle? Ich habe seit einiger Zeit versucht, dies mit fast allen Ergebnissen zu lösen, um den gleichen Fehler zu zeigen.

Jede Hilfe wird sehr geschätzt.

+0

@Strawberry vielleicht wegen zwei 'END' s? –

+0

Das wäre meine Vermutung, aber ich schreibe nicht zu viele Sprocs/Transaktionen – Strawberry

+0

Sie haben zwei END; Anweisungen nach COMMIT; das verursacht das Problem –

Antwort

1

Ok, ich habe meinen eigenen Code bearbeitet und das gewünschte Ergebnis erhalten.

Die Änderungen, die ich gemacht war:

BEGIN 
DECLARE unamec INT; 
DECLARE emailc INT; 
DECLARE m INT; 
DECLARE msg VARCHAR(100); 
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
START TRANSACTION; 
SET autocommit=0; 
SELECT COUNT(*) INTO unamec FROM login WHERE uname=`@user`; 
IF unamec=0 THEN 
    SELECT COUNT(*) INTO emailc FROM login WHERE [email protected]; 
    IF emailc=0 THEN 
     INSERT INTO login (uname, hash, email, role) values(@user,MD5(@password),@email,'1'); 
     SET msg='Successfully Registered'; 
    ELSE 
     SET msg='Email Already Exists'; 
    END IF; 
ELSE 
    SET msg='Username Already Exists'; 
END IF; 
COMMIT; 
BEGIN 
ROLLBACK; 
SET msg='ERROR'; 
END; 
SELECT msg as message; 
END 

Wenn jemand eine andere Antwort bekommen, schätzen es immer noch.

Wie auch immer, der obige Code funktioniert jetzt gut.

+0

gute Handler von Code :) –

Verwandte Themen