Php 不存在时的正确语法是什么

Php 不存在时的正确语法是什么,php,mysql,Php,Mysql,我试图防止MySQL表中出现重复条目。我试过插入忽略,但似乎不起作用。我相信这是因为我有一个自动递增列,因此没有两行是重复的 所以,我试着使用不存在的地方 $sql = "INSERT INTO testresults (ttime, resno, course, vid, playdate) VALUES (:ttime, :resno, :course, :vid, :playdate) WHERE NOT EXISTS (SELECT * FROM tempresults WHERE v

我试图防止MySQL表中出现重复条目。我试过插入忽略,但似乎不起作用。我相信这是因为我有一个自动递增列,因此没有两行是重复的

所以,我试着使用不存在的地方

$sql = "INSERT INTO testresults (ttime, resno, course, vid, playdate) VALUES (:ttime, :resno, :course, :vid, :playdate)
 WHERE NOT EXISTS (SELECT * FROM tempresults WHERE vid = :vid AND playdate = :playdate) LIMIT 1)";
但这又回来了

SQLSTATE[42000]: Syntax error or access violation: 1064 
关于堆栈溢出的例子有很多,但它们似乎都希望插入的值来自SELECT语句;而我是从编程生成的值插入

我想我只需要对SQL语句稍加修改


谢谢

我认为
INSERT IGNORE
可以工作

你说

我相信这是因为我有一个自动递增列,因此没有两行是重复的

这是真的,但根据问题中的SQL所做的尝试,可以根据
vid
playdate
列来识别用于您目的的重复行

可以在这两列上添加唯一约束

ALTER TABLE testresults ADD UNIQUE unique_vid_playdate (vid, playdate)

然后,
INSERT IGNORE
将执行您希望它执行的操作。

如果您没有唯一的约束,请使用此
选择
替换
值:

INSERT INTO testresults (ttime, resno, course, vid, playdate) 
SELECT :ttime, :resno, :course, :vid, :playdate
WHERE NOT EXISTS (SELECT * FROM tempresults WHERE vid = :vid AND playdate = :playdate)

无需使用
LIMIT
,因为语句将返回最多1行。

您是否希望将
LIMIT 1
放在与
SELECT
关联的括号内?然后删除最后的结束括号(和不匹配的括号)。对你的目标感到困惑。您将插入具有指定值的一行的语法与从另一个表复制多行的语法相结合。您想在此处执行哪项操作?请参阅,这可能有助于您不/不能使用
WHERE
插入…值(值列表)
查询;但您可以将其与一个
INSERT…SELECT value\u列表一起使用,其中有…
query。我想在表中插入一行,但要确保它不是重复的行。表的模式包括字段uniq,它是一个自动递增字段