php - WHERE NOT EXISTS 语法错误

标签 php mysql session syntax where-clause

我的代码不起作用,我不知道为什么......

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/

相关文章:

php邮件函数

php - 从动态创建的表中搜索数据

java - Mysql和Java搜索匹配多列中的多个值

java - 如何获取所有 session 值和名称?

javascript - 在这种情况下使用 CSS 或 Jquery 有什么区别

php - 什么是 HTTP 严格传输安全 (HSTS) (Apache)?

php - Laravel 5.5 Eloquent 没有在搜索字符串周围加上引号

mysql - 根据mysql中的条件从另一个表中更新一个表中的列中的值

php - 在登录系统 PHP 中实现用户帐户

php - Ajax 和 session 不起作用