Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL数据库中的正则表达式不是';行不通_Php_Mysql_Regex_Triggers_Xampp - Fatal编程技术网

Php MySQL数据库中的正则表达式不是';行不通

Php MySQL数据库中的正则表达式不是';行不通,php,mysql,regex,triggers,xampp,Php,Mysql,Regex,Triggers,Xampp,我在MySQL服务器中的正则表达式检查似乎不起作用,或者我犯了一个非常明显的错误(如果是的话,很抱歉,我就是无法发现) 触发器:触发器检查成员 事件:插入 表:tbl_成员 声明: 开始 如果(NEW.member_email REGEXP'^(\w+@\w+.\w+$)=FALSE,则 信号状态“12345” 设置消息_TEXT='无效电子邮件'; 如果结束; 结束 时间:之前 已创建:NULL sql模式:无引擎替换 这就是我的触发器,它突出显示了我的正则表达式。这是我的证明(可能是错误的

我在MySQL服务器中的正则表达式检查似乎不起作用,或者我犯了一个非常明显的错误(如果是的话,很抱歉,我就是无法发现)

触发器:触发器检查成员

事件:插入

表:tbl_成员

声明: 开始 如果(NEW.member_email REGEXP'^(\w+@\w+.\w+$)=FALSE,则 信号状态“12345” 设置消息_TEXT='无效电子邮件'; 如果结束; 结束

时间:之前

已创建:NULL

sql模式:无引擎替换

这就是我的触发器,它突出显示了我的正则表达式。这是我的证明(可能是错误的),它适用于我想要输入的数据

我知道这是一个糟糕的正则表达式,我刚开始学习它,想测试基本的东西,就像我知道如果有像xxx这样的电子邮件。yyy@foo.bar它不会有同样的结果

这是我产生错误的测试数据

INSERT INTO tbl_members VALUES ('jeff', 'password', 'hardy', 'jeff', 'matt',     'you@you.you');

^不是真正的代码,错误消息

<?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 \'^(\\\\w+@\\\\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', 'you@you.you')");
    //$dbc->query();
    $dbc->close();
    ?>
将正则表达式更改为:

^[A-Za-z_]+@[A-Za-z_]+\\.[A-Za-z_]+$

我已经把你的照片整理好了。现在我已经这样做了,如果你能把第一、第三和第四个替换为它们的文本等价物,那就太好了!regex tester的图像非常有用,但是所有其他的图像都可以从中复制和粘贴,这在图像中是不可能的(您会发现这是使用图像的常见反应-人们会要求您提供文本版本-代码、错误消息等)。(除了那个反馈,这是一个很好的问题。我想你会很快得到一个详细的答案。)如果(NEW.member_email REGEXP'^[:word:][+@[:word:][+\.:word:][+$”)=FALSE则是最终正则表达式的样子,它也不起作用。我需要额外的“\”还是像我假设的那样逃离“\”@Fat\u Llama我不信任mysql中的
\w
,不确定它的引擎是否支持它。这就是为什么我放第二个选项。@Fat\u Llama顺便说一句,试试changin
[:word://code>但是
[:alnum:]
@Fat\u Llama我已经使用了普通的mysql正则表达式,但是对于php代码,您必须将
\\.
更改为
\\\.
^[A-Za-z_]+@[A-Za-z_]+\\.[A-Za-z_]+$