我的MySQL服务器中的正则表达式检查似乎没有工作,或者我犯了一个非常明显的错误(对不起,如果是这样,我只是不能发现它,如果是这样)。我在我的MySQL数据库中的正则表达式不起作用
触发:trig_check_memebers
事件:INSERT
表:tbl_members
声明: BEGIN IF(NEW.member_email REGEXP“^(\ w + @ \ w +。 \ w +)$')= FALSE THEN SIGNAL SQLSTATE'12345' SET MESSAGE_TEXT ='invalid email'; END IF; END
时间:BEFORE
创建:NULL
的sql_mode:NO_ENGINE_SUBSTITUTION
所以这是我的触发器只是为了显示正则表达式我有,它会突出显示。这是我的证据(可能是错误的),它适用于我想输入的数据。
我知道它不好的正则表达式我刚开始学习它,并想测试基本的东西,像我知道,如果有喜欢的[email protected]它不会有相同的结果的电子邮件。
这里是我的测试数据产生的错误。
INSERT INTO tbl_members VALUES ('jeff', 'password', 'hardy', 'jeff', 'matt', '[email protected]');
Error
SQL query:
INSERT INTO tbl_members VALUES ('jeff', 'password', 'hardy', 'jeff', 'matt', '[email protected]')
MySQL said: Documentation
#1644 - invalid email
^不是真正的代码,错误消息。
<?php
//Variables
$database_name;
$dbc;
$table_create_queries;
$triggers;
//Initialization
$database_name = 'PolySoft';
$dbc = new mysqli('localhost', 'root', null);
$table_create_queries = array
(
//Members Table
'tbl_members' => 'CREATE TABLE tbl_members(member_username varchar(40) NOT NULL,
member_password varchar(60) NOT NULL,
member_surname varchar(40) NOT NULL,
member_forename varchar(40) NOT NULL,
member_othernames varchar(40),
member_email varchar(254),
UNIQUE(member_email),
PRIMARY KEY(member_username));'
,
//Addresses Table
'tbl_addresses' => 'CREATE TABLE tbl_addresses(address_postcode varchar(10) NOT NULL,
address_country varchar(255) NOT NULL,
address_county varchar(255),
address_city varchar(255) NOT NULL,
address_town varchar(255),
address_street varchar(255) NOT NULL,
address_house_name_or_number varchar(255) NOT NULL,
PRIMARY KEY(address_postcode));'
);
$triggers = array
(
'check_members' =>'CREATE TRIGGER trig_check_memebers
BEFORE INSERT ON tbl_members
FOR EACH ROW
BEGIN
IF (NEW.member_email REGEXP \'^(\\\\[email protected]\\\\w+\\\\.\\\\w+)$\') = FALSE THEN
SIGNAL SQLSTATE \'12345\'
SET MESSAGE_TEXT = \'invalid email\';
END IF;
END;'
);
$dbc->query("DROP DATABASE IF EXISTS $database_name");
$dbc->query("CREATE DATABASE $database_name");
$dbc->close();
$dbc = new mysqli('localhost', 'root', null, $database_name);
foreach($table_create_queries as $tbl => $query)
{
$dbc->query($query);
}
foreach($triggers as $trig => $query)
{
$dbc->query($query);
}
$dbc->query("INSERT INTO tbl_members VALUES ('jeff', 'password', 'hardy', 'jeff', 'matt', '[email protected]')");
//$dbc->query();
$dbc->close();
?>
如果你想知道为什么我删除和创建数据库:代码永远不会实际上是在服务器上,它使我的任务我可以在任何服务器上运行脚本,所以我不要”不得不依靠引入我的个人电脑来显示它的工作原理。导师可以只对他执行这个创建它,它也是我的数据库模块也因此拥有一个位置的所有SQL也不错供我参考等
Is it Possible to Enforce Data Checking in MySQL using Regular expression
顶部答案是什么给了我触发代码。
我搞掂你的图像。现在我已经这样做了,如果你可以将第一,第三和第四个替换为文本,那就太棒了!正则表达式测试器的图像是非常有用的,但其他所有图像都可以复制和粘贴,而这对图像来说是不可能的(您会发现这是对使用图像的常见反应 - 人们会问你文本的版本 - 代码,错误消息等)。 – halfer 2015-04-05 00:49:09
(除了那些反馈,这是一个很好的问题,我认为你会很快得到一个答案,详细程度。) – halfer 2015-04-05 00:49:59