首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我很难从php执行MySQL触发器

我很难从php执行MySQL触发器
EN

Stack Overflow用户
提问于 2013-12-11 20:29:15
回答 2查看 481关注 0票数 0

由于某些原因,我无法让这个触发器在PHP中运行,即使它在phpMyAdmin中工作。

代码语言:javascript
运行
复制
CREATE TRIGGER `check_title` BEFORE INSERT ON `customer` 
FOR EACH ROW 
BEGIN
IF NEW.title NOT IN     ('Mr','Miss','Ms','Dr','Mrs')THEN
SET @msg := 'Constraint check_title violated';
SIGNAL sqlstate '45000' SET message_text = @msg;
END IF
END

我试过使用DELIMTER $$命令,并尝试通过困扰过程和面向对象的方法来运行它。

如能提供任何帮助,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-11 21:26:38

  1. 您没有在;之后终止END IF
  2. 您根本不需要@msg变量,特别是用户(会话)变量

据说你的扳机看起来

代码语言:javascript
运行
复制
CREATE TRIGGER `check_title` 
BEFORE INSERT ON `customer` 
FOR EACH ROW 
BEGIN
  IF NEW.title NOT IN('Mr','Miss','Ms','Dr','Mrs') THEN
    SIGNAL sqlstate '45000' SET message_text = 'Constraint check_title violated';
  END IF;
END

这是SQLFiddle演示

现在,在php中执行它,您不需要更改DELIMITER,因为它是mysql命令,而不是SQL语句。

您没有提到您实际使用的扩展(mysqli_*PDO,希望不推荐的mysql_*),所以下面是php代码在mysqli_*中的样子

代码语言:javascript
运行
复制
<?php
$db = new mysqli('localhost', 'user', 'password', 'dbname');
if (!$db) {
    die('Could not connect: ' . $db->connect_error); //TODO better error handling
}

$sql = "
CREATE TRIGGER check_title 
BEFORE INSERT ON customer 
FOR EACH ROW 
BEGIN
  IF NEW.title NOT IN('Mr','Miss','Ms','Dr','Mrs') THEN
    SIGNAL sqlstate '45000' SET message_text = 'Constraint check_title violated';
  END IF;
END";

if (!$db->query($sql)) {
    die('Can\'t create the trigger: ' . $db->error); //TODO better error handling
}

$db->close();

echo 'Trigger successfully created.';
票数 0
EN

Stack Overflow用户

发布于 2013-12-11 21:23:23

试试下面的代码。

代码语言:javascript
运行
复制
DELIMITER $$

DROP TRIGGER IF EXISTS testing.check_title$$
USE `testing`$$


CREATE TRIGGER `check_title` BEFORE INSERT ON `customer` FOR EACH ROW
    IF NEW.title NOT IN  ('Mr','Miss','Ms','Dr','Mrs') THEN
        SIGNAL sqlstate '45000' SET message_text = 'Constraint check_title violated';
    END IF
$$
DELIMITER ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20529287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档