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{
}
只是应该将用户和照片插入到 table 中,如果之前没有这样的话...感谢您的帮助!
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)")
SELECT
缺少使用 WHERE
子句时所需的 FROM
子句。
这就是问题所在。
有几种方法可以修复它。
为了快速修复,您可以在 WHERE
之前添加 FROM DUAL
。
如果您不喜欢 MySQL 查询看起来像是 Oracle 查询,您可以使用内联视图作为行源。
代替FROM DUAL
你可以使用FROM (SELECT 1) i
.
这是修复它的 less-Oracle-more-MySQL-like 方法。我就是这样做的。
您还可以引用任何 table 或认为您保证 returns 恰好一行。 (不能是零行,也不能是两行。
其他一些注意事项:
在MySQL中,标识符(例如列名)可以用反引号转义,但不能用单引号转义。只有当标识符包含不允许的字符(在未转义的标识符中)或标识符与保留字冲突时,才需要对其进行转义。
INSERT INTO photolikes(`User`, `Photo`)
^ ^ ^ ^
此外,该代码似乎容易受到 SQL 注入攻击。合并到 SQL 语句文本中的潜在不安全值应该正确转义。但是更好的模式是使用带有绑定占位符的准备好的语句。
我有这个代码不起作用,我不确定为什么...
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{
}
只是应该将用户和照片插入到 table 中,如果之前没有这样的话...感谢您的帮助!
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)")
SELECT
缺少使用 WHERE
子句时所需的 FROM
子句。
这就是问题所在。
有几种方法可以修复它。
为了快速修复,您可以在 WHERE
之前添加 FROM DUAL
。
如果您不喜欢 MySQL 查询看起来像是 Oracle 查询,您可以使用内联视图作为行源。
代替FROM DUAL
你可以使用FROM (SELECT 1) i
.
这是修复它的 less-Oracle-more-MySQL-like 方法。我就是这样做的。
您还可以引用任何 table 或认为您保证 returns 恰好一行。 (不能是零行,也不能是两行。
其他一些注意事项:
在MySQL中,标识符(例如列名)可以用反引号转义,但不能用单引号转义。只有当标识符包含不允许的字符(在未转义的标识符中)或标识符与保留字冲突时,才需要对其进行转义。
INSERT INTO photolikes(`User`, `Photo`)
^ ^ ^ ^
此外,该代码似乎容易受到 SQL 注入攻击。合并到 SQL 语句文本中的潜在不安全值应该正确转义。但是更好的模式是使用带有绑定占位符的准备好的语句。