2016-11-03 95 views
0

在mysql中验证电子邮件地址我已经通过有效的电子邮件地址,在MySQL存储过程中没有得到一个问题,这里就是想发生:在存储过程

DELIMITER go 
Create procedure AddMessages(
    Out MessageID tinyint(11), 
IN iFirstName varchar(30), 
IN iLastName varchar(30), 
IN iTextBox varchar(400), 
IN iEmailAddress varchar(30)) 
BEGIN 
/*declaring local variable*/ 

    If(iFirstName='') then 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Fill out the First Name'; 
    Elseif(iLastName='') then 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Fill out the Last Name'; 
    Elseif(iTextBox='') then 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Fill out the Message Box'; 
    Elseif(iEmailAddress='') then 
    SIGNAL SQLSTATE '45000' 
/* Checking if email address is not valid*/ 
    SET MESSAGE_TEXT = 'Fill out the Email Address'; 
    Elseif(iEmailaddress!='^[a-zA-Z0-9][a-zA-Z0-9._-]*@[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a‌​-zA-Z]{2,4}$') then 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Please enter the correct email address' 
; 
Else 
/* insert the messages*/ 
    insert into Messages( 
    FirstName, 
    LastName, 
     Messagetextbox, 
    EmailAddress 
    ) 
    Values 
    (
    iFirstName, 
    iLastName , 
    iTextBox , 
    iEmailAddress 
    ); 
    set MessageID = last_insert_id(); 
    end if; 
    End 

当我用

测试它
set @new_id = null; 
call AddMessages(@new_id,'Jamie','Jones','Hello','[email protected]'); 
select @new_id; 

我是,我一直得到消息,说请 输入正确的邮箱地址,我已经测试了不使用 @和它的作品,但由于某种原因,验证电子邮件苏结果ppose不通过 显示相同的消息。

+0

您不能使用'!='进行正则表达式匹配。使用'IF iEmailaddress NOT RLIKE'...'' – Barmar

+0

'='和'!='做精确的字符串匹配,而不是正则表达式。 – Barmar

+0

请加**,请**允许超过30个字符的电子邮件地址。由于“david.jones @ corporationlatetotheparty.com”不是一个不寻常的地址,你会看到很多人碰到这个限制。使用'VARCHAR(255)'作为任何通用文本字段,除非你有一个非常有说服力的理由来改变默认值。 – tadman

回答

1

它更改为:

Elseif (iEmailaddress NOT RLIKE '^[a-zA-Z0-9][a-zA-Z0-9._-]*@[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a‌​-zA-Z]{2,4}$') then 

RLIKE是用于匹配正则表达式的运算符。 =!=完全匹配字符串。

+0

技术上正确,但哇,是来自问题ever * bad *的正则表达式。 – tadman

+0

@tadman我甚至懒得去检查正则表达式,我觉得这足以帮助他使用SQL语法。 – Barmar