插入到不存在的地方

时间:2013-04-22 11:14:43

标签: php mysql pdo

我正在尝试将组名插入我的数据库中。由于它们是用户组,我只想插入一次,所以如果我不小心再次插入它们,它应该拒绝它,因为它已经存在。我也在使用PDO语句。

// groups
$db->query("CREATE TABLE IF NOT EXISTS groups ( ID INT NOT NULL AUTO_INCREMENT, 
                    name VARCHAR(200),
                    primary key (ID)
            )");        

// Fill tables

//Groups
$db = connectDatabase();    
$name = 'Administrator';
$query = $db->prepare("INSERT INTO groups (name) SELECT :name WHERE NOT EXISTS (SELECT * FROM groups WHERE name = :name)");
$query->bindParam(':name', $name);
$query->execute();

$name = 'Moderator';
$query = $db->prepare("INSERT INTO groups (name) SELECT :name WHERE NOT EXISTS (SELECT * FROM groups WHERE name = :name)");
$query->bindParam(':name', $name);
$query->execute();

由于某种原因,它没有向表组添加任何内容。任何人都可以帮我这个吗?

非常感谢

3 个答案:

答案 0 :(得分:5)

为什么不将名称 UNIQ

$db->query("CREATE TABLE IF NOT EXISTS groups ( ID INT NOT NULL AUTO_INCREMENT, 
                    name VARCHAR(200),
                    primary key (ID),
                    UNIQUE KEY `name` (`name`)
            )");        

然后制作INSERT IGNORE

$db = connectDatabase();    
$name = 'Administrator';
$query = $db->prepare("INSERT IGNORE INTO groups (name) VALUES (:name)");
$query->bindParam(':name', $name);
$query->execute();

答案 1 :(得分:0)

你忘记了FROM

INSERT INTO groups (name) SELECT :name 
FROM groups WHERE NOT EXISTS 
(SELECT * FROM groups WHERE name = :name)

答案 2 :(得分:-1)

尝试以下

If Not Exists(select * from groups where name=:name)
Begin
insert into groups(name) values (:name)
End