Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
MySQL:无法在触发器中使用信号_Mysql_Sql_Database_Triggers_Signals - Fatal编程技术网

MySQL:无法在触发器中使用信号

MySQL:无法在触发器中使用信号,mysql,sql,database,triggers,signals,Mysql,Sql,Database,Triggers,Signals,我试图使用MySQL触发器生成一条错误消息。下面是我的代码: DELIMITER $$ CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees` FOR EACH ROW BEGIN IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN SIGNAL SQLSTATE '450

我试图使用MySQL触发器生成一条错误消息。下面是我的代码:

DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
    IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
        SIGNAL SQLSTATE '45000';
        SET MESSAGE_TEXT := 'Disabled Thing';
    END IF;
END$$   
DELIMITER ; 
但这总是会产生错误。我不知道错误是什么,因为它没有说明任何错误,它只是“错误”


有什么建议吗?除此之外,有些人说使用
信号
会遇到问题,因为它可能依赖于MySQL版本。有什么建议吗?

设置消息文本子句是信号语法的一部分-它们之间不应该有分号(
)。 此外,它使用
=
运算符,而不是
:=

DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
    IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
        SIGNAL SQLSTATE '45000' -- Note: no semicolon
        SET MESSAGE_TEXT = 'Disabled Thing'; -- Note the = operator
    END IF;
END$$   
DELIMITER ; 

PHPMyAdmin提供了指定SQL中使用的分隔符的选项

我指定了
$
作为分隔符,而不是
但Mysql仍在期待
在某些地方。所以

CREATE TRIGGER trg_update_wp_posts BEFORE UPDATE ON wp_posts
    FOR EACH ROW
        IF (NEW.post_content LIKE '%<script%>%') THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Script not allowed in post';
    END IF;
在更新wp_帖子之前创建触发器trg_update_wp_帖子
每行
如果(新的.post_内容,如“%”),则
信号SQLSTATE“45000”设置消息_TEXT=“post中不允许使用脚本”;
如果结束;
失败

但是

在更新wp_帖子之前创建触发器trg_update_wp_帖子
每行
如果(新的.post_内容,如“%”),则
信号SQLSTATE“45000”设置消息_TEXT=“post中不允许使用脚本”;
如果结束$$

Works

我在MySQL工作台中添加了这段代码,并导出了sql文件,一切都很顺利!我不知道PHP MyAdmin发生了什么。谢谢
CREATE TRIGGER trg_update_wp_posts BEFORE UPDATE ON wp_posts
    FOR EACH ROW
    IF (NEW.post_content LIKE '%<script%>%') THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Script not allowed in post';
    END IF$$