WHERE NOT EXISTS语法错误

时间:2016-04-15 16:34:18

标签: php mysql session syntax where

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

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{
}

如果之前没有这样的用户和照片应该插入表格中...感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

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

这就是问题所在。

有几种方法可以解决它。

要快速解决问题,您可以在 FROM DUAL 之前添加 WHERE

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

取代 FROM DUAL ,您可以使用 FROM (SELECT 1) i

这是一种不那么类似Oracle的MySQL修复方法。我就是这样做的。

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

其他一些说明:

在MySQL中,标识符(例如列名称)可以使用反引号字符进行转义,但不能使用单引号进行转义。如果标识符包含不允许的字符(未转义标识符)或标识符与保留字冲突,则只需对其进行转义。

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

此外,代码似乎容易受到SQL注入攻击。应正确转义包含在SQL语句文本中的潜在不安全值。但更好的模式是使用带有绑定占位符的预处理语句。

答案 1 :(得分:0)

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)")