2012-12-18 23 views
0

如果没有“name”和“email”一起存在的条目,我只想插入。如果存在两个值,PHP/SQL不会插入

所以没关系,如果“名称”存在与不同的电子邮件或反之亦然。

mysql_query("INSERT INTO list (name,email) VALUES ('$name','$email') "); 

我想在一个SQL语句中完成bette性能。

+0

这是针对mysql还是mssql?简单的解决方案是做一个组合的主键来禁止插入相同的条目组合。不利的一面是,当执行该代码时,你会得到php错误,除非它被放在try catch中,但有时甚至是这样。让我知道如果mssql或MySQL,我会告诉你一个很酷的把戏,一举成功 – Rob

+0

这是MySql而不是MsSql – user1209203

回答

1

将两个列(名称,电子邮件)作为复合主键并使用ON DUPLICATE KEY UPDATE来防止php错误。

+0

我已经使两个列的主键和使用此查询,但它只是插入正常mysql_query(“INSERT INTO列表(名称,电子邮件)VALUES('$ name','$ email')ON DUPLICATE KEY UPDATE name ='$ name',email ='$ email'“); – user1209203

1

使您的主键(名称,电子邮件)。

1

如果您不能将[name,email]作为主键,请将其设置为唯一约束。这样就不会插入两个值匹配的记录。

1

有姓名和电子邮件主键,然后做到这一点:

REPLACE INTO list (name,email) VALUES ('$name','$email')

取而代之的是一样的插入,除非该值已经存在,它将覆盖它们。

+0

这只会在MySQL上工作,我想。 [注意性能问题](http://code.openark.org/blog/mysql/replace-into-think-twice)。 –

+0

我试过了,得到这个错误:#1071 - 指定的键太长;最大密钥长度为1000字节 – user1209203

+0

您的姓名和电子邮件字段有多大? – HorusKol