我的代码不起作用,我不知道为什么......
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 查询,您可以使用内联 View 作为行源。
您可以使用 FROM (SELECT 1) i
代替 FROM DUAL
。
这是一种不太像 Oracle 而是更像 MySQL 的修复方法。我就是这么做的。
您还可以引用任何保证返回一行的表或 View 。 (不能是零行,也不能是两行。
<小时/>其他一些注意事项:
在 MySQL 中,标识符(例如列名)可以使用反引号字符进行转义,但不能使用单引号进行转义。仅当标识符包含不允许的字符(在未转义的标识符中)或标识符与保留字冲突时,才需要对其进行转义。
INSERT INTO photolikes(`User`, `Photo`)
^ ^ ^ ^
此外,该代码似乎容易受到 SQL 注入(inject)攻击。合并到 SQL 语句文本中的潜在不安全值应正确转义。但更好的模式是使用带有绑定(bind)占位符的准备好的语句。
关于php - WHERE NOT EXISTS 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36652481/