我有这个代码不起作用,我不知道为什么......
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{
}
如果之前没有这样的用户和照片应该插入表格中...感谢任何帮助!
答案 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)")