我正在尝试将组名插入我的数据库中。由于它们是用户组,我只想插入一次,所以如果我不小心再次插入它们,它应该拒绝它,因为它已经存在。我也在使用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();
由于某种原因,它没有向表组添加任何内容。任何人都可以帮我这个吗?
非常感谢
答案 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