2013-07-12 20 views
1

後我使用PHP和MySQL創建一個簡單的基於文本的RPG和正在運行到一個奇怪的錯誤,當試圖利用一個AFTER INSERT觸發器。MySQL的PHP​​遊戲插入觸發誤差

之後我插入一個新的動物到動物表我想使用觸發器來還插入新記錄到存儲表與戰利品有關的信息我添加的生物。具體來說,當我在生物中插入一條記錄時,我希望它將'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不是空的,那麼將其插入到存儲表中。

觸發加罰款,但之後我插入到生物表時引發的錯誤是一個奇怪的一個。我得到:

MySQL表示:#1054 - 未知列「A€OEA€

以及物品是否完整,這裏是我使用的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' 
) 

這是很多。謝謝你的時間!

+0

嘗試用**''替換引號'''和'''。** –

+0

'IF(New.gloot!=「」)'看起來很可疑,應該是'「」' – DevZer0

+0

也可以是字符集問題。確保一切,無處不在任何地方都設置爲UTF-8(或任何你喜歡的字符集)。容易忘記默認字符集中的一個小元素,並將所有內容擰緊。 – Ariane

回答

0

更換報價'

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; 
$$ 

你也忘了drop命令後添加$$

+0

這工作就像一個魅力。必須是因爲我最初在Word中編寫觸發器。給了我有趣的引語等等。經過測試,它看起來不錯,非常感謝您的時間! – Soulfire