WHERE NOT EXISTS语法错误


WHERE NOT EXISTS syntax error

我有这个代码不起作用,我不知道为什么。。。

if(isset($_GET['id'], $_SESSION['username'])){
  $id = $_GET['id'];
  $user = $_SESSION['username'];
  $query = $handler->query("INSERT INTO photolikes('User', 'Photo')
                            SELECT '$user', '$id'
                            WHERE NOT EXISTS (SELECT Id FROM photolikes WHERE User='$user' AND Photo=$id)");
}else{
}

只是应该将用户和照片插入到一个表中,如果以前没有这样的。。。谢谢你的帮助!

SELECT缺少使用WHERE子句时所需的FROM子句。

这就是问题所在。

有几种方法可以解决这个问题。

为了快速修复,您可以在WHERE之前添加FROM DUAL


如果您不喜欢MySQL查询看起来像Oracle查询,可以使用内联视图作为行源。

您可以使用FROM (SELECT 1) i来代替FROM DUAL

这是一种不太像Oracle、更像MySQL的修复方法。这就是我的做法。

您也可以引用任何保证只返回一行的表或视图。(不可能是零行,也不可能是两行。


其他注意事项:

在MySQL中,标识符(例如列名)可以用反勾字符转义,但不能用单引号转义。只有当标识符包含不允许的字符(在未转义的标识符中)或标识符与保留字冲突时,才需要转义标识符。

 INSERT INTO photolikes(`User`, `Photo`)
                        ^    ^  ^     ^

此外,该代码似乎容易受到SQL注入的攻击。合并到SQL语句文本中的可能不安全的值应该正确转义。但更好的模式是使用带有绑定占位符的prepared语句。

INSERT INTO photolikes(`User`, `Photo`)
     SELECT '$user', '$id'
     FROM <someTable>
     ^^^^ you miss the FROM
     WHERE NOT EXISTS (SELECT Id 
                       FROM photolikes  -- Here you didnt forget.
                       WHERE User='$user' AND Photo=$id)")