用于验证 Mysql table 中的 URL 列值的触发器
Trigger for validating URL column values in Mysql table
我在 PhpMyadmin 中有一个 table,其中有一列采用 url 值。我不想从 PHP code/frontend 进行验证。如何使用 trigger/procedure 实现此目的?我尝试了以下触发器但出现错误:“#1241 Operand should contain 3 column(s)”
CREATE TRIGGER `validate_url_after_insert` BEFORE INSERT ON `table_name`
FOR EACH ROW BEGIN
DECLARE str1 varchar(10);
DECLARE str2 varchar(10);
SET str1='http://';
SET str2='https://';
if(substring_index(substring_index(substring_index(REPLACE(new.url,str2,str1), '/',3),str1,-1),'.',-1) != 'com',substring_index(substring_index(substring_index(REPLACE(new.url,str2,str1), '/',3),str1,-1),'.',-3),substring_index(substring_index(substring_index(REPLACE(new.url,str2,str1), '/',3),str1,-1),'.',-2)) != '' then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Can not insert';
END IF;
END
好的,我自己得到了答案。
CREATE TRIGGER `validate_work_url` BEFORE INSERT ON `table_name`
FOR EACH ROW BEGIN
IF new.url REGEXP "^(https?://|www.)[.A-Za-z0-9-]+.[a-zA-Z]{2,4}" THEN
SET new.url = new.url;
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "INCORRECT URL" ;
END IF;
END
我在 PhpMyadmin 中有一个 table,其中有一列采用 url 值。我不想从 PHP code/frontend 进行验证。如何使用 trigger/procedure 实现此目的?我尝试了以下触发器但出现错误:“#1241 Operand should contain 3 column(s)”
CREATE TRIGGER `validate_url_after_insert` BEFORE INSERT ON `table_name`
FOR EACH ROW BEGIN
DECLARE str1 varchar(10);
DECLARE str2 varchar(10);
SET str1='http://';
SET str2='https://';
if(substring_index(substring_index(substring_index(REPLACE(new.url,str2,str1), '/',3),str1,-1),'.',-1) != 'com',substring_index(substring_index(substring_index(REPLACE(new.url,str2,str1), '/',3),str1,-1),'.',-3),substring_index(substring_index(substring_index(REPLACE(new.url,str2,str1), '/',3),str1,-1),'.',-2)) != '' then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Can not insert';
END IF;
END
好的,我自己得到了答案。
CREATE TRIGGER `validate_work_url` BEFORE INSERT ON `table_name`
FOR EACH ROW BEGIN
IF new.url REGEXP "^(https?://|www.)[.A-Za-z0-9-]+.[a-zA-Z]{2,4}" THEN
SET new.url = new.url;
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "INCORRECT URL" ;
END IF;
END