MySQL PHP游戏后插入触发错误

MySQL PHP游戏后插入触发错误,php,mysql,triggers,Php,Mysql,Triggers,我正在使用PHP和MySQL创建一个简单的基于文本的RPG,在尝试使用AFTER-INSERT触发器时遇到了一个奇怪的错误 在我将一个新生物插入生物表后,我想使用触发器将一个新记录插入存储表,其中包含我添加的生物的战利品信息。具体地说,当我在《生物》中插入一条记录时,我希望它接受“gloot”并将其放入存储表中 生物表代码: CREATE TABLE IF NOT EXISTS `creatures` ( `id` int(3) NOT NULL AUTO_INCREMENT,

我正在使用PHP和MySQL创建一个简单的基于文本的RPG,在尝试使用AFTER-INSERT触发器时遇到了一个奇怪的错误

在我将一个新生物插入生物表后,我想使用触发器将一个新记录插入存储表,其中包含我添加的生物的战利品信息。具体地说,当我在《生物》中插入一条记录时,我希望它接受“gloot”并将其放入存储表中

生物表代码:

CREATE TABLE IF NOT EXISTS `creatures` (
      `id` int(3) NOT NULL AUTO_INCREMENT,
      `name` varchar(21) NOT NULL,
      `hpoints` mediumint(3) NOT NULL,
      `maxhp` mediumint(3) NOT NULL,
      `attack` mediumint(3) NOT NULL,
      `defense` mediumint(3) NOT NULL,
      `experience` int(3) NOT NULL,
      `level` mediumint(3) NOT NULL,
      `gloot` varchar(100) NOT NULL,
      `gold` mediumint(3) NOT NULL,
      `isloot` mediumint(3) NOT NULL,
      PRIMARY KEY (`id`)
    )
存储表的代码:

CREATE TABLE IF NOT EXISTS `store` (
  `name` varchar(50) NOT NULL,
  `stats` varchar(30) DEFAULT NULL,
  `statadd` smallint(3) DEFAULT NULL,
  `price` int(11) DEFAULT NULL,
  `amount` smallint(5) DEFAULT NULL,
  `randid` int(9) NOT NULL,
  `type` varchar(30) DEFAULT NULL,
  `location` varchar(100) DEFAULT NULL
) 
最后,这里是触发代码

DELIMITER $$
DROP TRIGGER IF EXISTS itemToStore
CREATE TRIGGER itemToStore
AFTER INSERT ON `creatures`
FOR EACH ROW BEGIN
IF (New.gloot != “”) THEN
INSERT INTO  `store`  (`name`, `statadd`, `price`, `amount`, `randid`)
VALUES('New.gloot', '0', '0',’0’, ROUND( 100000000 * RAND( ) ));
END IF;
END;
$$
所以,我要说的是,如果gloot不是空的,那么将其插入存储表

触发器添加得很好,但在我插入到bioters表后引发的错误很奇怪。我得到:

MySQL说:#1054-未知专栏“我的朋友”

为了完整起见,我使用的insert语句如下:

INSERT INTO  `legends`.`creatures` (

`id` ,
`name` ,
`hpoints` ,
`maxhp` ,
`attack` ,
`defense` ,
`experience` ,
`level` ,
`gloot` ,
`gold` ,
`isloot`
)
VALUES (
NULL ,  'dragon',  '200',  '200',  '10',  '10',  '1',  '1',  'Dragon Bones',  '250',  '50'
)

啊,那太多了。谢谢你抽出时间

将引号
替换为

DELIMITER $$
DROP TRIGGER IF EXISTS itemToStore $$

CREATE TRIGGER itemToStore AFTER INSERT ON `creatures`
FOR EACH ROW BEGIN
   IF (NEW.gloot <> '') 
   THEN
      INSERT INTO  `store`  (`name`, `statadd`, `price`, `amount`, `randid`)
      VALUES (NEW.gloot, '0', '0','0', ROUND( 100000000 * RAND( ) ));
   END IF;
END;
$$
分隔符$$
如果存在itemToStore,则丢弃触发器$$
在“生物”上插入后创建触发器itemToStore`
每行开始
IF(NEW.gloot“”)
然后
插入'store'('name'、'statad'、'price'、'amount'、'randid`)
值(NEW.gloot、'0'、'0',四舍五入(100000000*RAND());
如果结束;
结束;
$$

您还忘了在
drop
命令之后添加
$$

尝试将引号
替换为
如果(New.gloot!=”)
看起来可疑,则应该是
也可能是字符集问题。确保EVERYTHING,EVERYWHERE始终设置为UTF-8(或任何您喜欢的字符集)。很容易忘记默认字符集中的一个小元素,把一切都搞砸了;查看与您的MySQL服务器版本对应的手册,以了解可在以下位置使用的正确语法:“在插入后为每一行创建触发器项ToStore BEGIN IF”(如果“第2行是我现在在将有趣的引号更改为
后删除反勾号(无论如何都不需要)后得到的结果)考虑到在堆栈交换中,反勾号被用来生成类似于代码的块,这可能会使您的消息更清晰。这很有魅力。一定是因为我最初是用Word编写触发器的。给了我一些有趣的引语之类的。刚刚测试过,看起来很棒,非常感谢您抽出时间!