2017-07-01 3 views
-1

私は自分のユーザー登録ページのためのMYSQLプロシージャを書きました、私はすでにそこにそこからMySQLにデータを送信するPHP部分を書いて、検索)。しかし、私はこれは私の手順でMySQLが1064あなたはあなたのSQL構文にエラーがあります

を推測する私のハンドラまたは取引の問題点のいくつかの並べ替えがあります:

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 

私は常にエラーに

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 

を取得するには、私が行方不明です明らかに何かがありますか?私は同じエラーを表示するためにほとんどすべての結果でこれを解決するためにしばらく時間をかけています。

ご協力いただければ幸いです。

+0

@Strawberryおそらく2つの 'END'sのため? –

+0

それは私の推測だろうが、私はあまりにも多くのsprocs /トランザクションを書くことはありません – Strawberry

+0

あなたは2つのENDを持っています。 COMMITの後のステートメント。それは問題の原因となっている –

答えて

1

私は自分のコードを編集して必要な結果を得ました。私が作った

変更した誰もが、他の答えを得る場合

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 

は、まだそれを感謝しています。

とにかく、上記のコードはうまくいきました。

+0

コードの良いハンドラ:) –

関連する問題