为了账号安全,请及时绑定邮箱和手机立即绑定

INSERT... NOT EXISTS 适用于 MAMP,但不适用于真实服务器

INSERT... NOT EXISTS 适用于 MAMP,但不适用于真实服务器

PHP
紫衣仙女 2022-10-28 10:04:28
我正在尝试将我在 MAMP 服务器上本地开发的网站迁移到实时服务器。所有查询都按预期在 MAMP 上运行。在实时服务器上,我收到“输入...不存在”的查询错误。MAMP 服务器:PHP - 7.4.2 MySQL - 5.7.26 InnoDB实时服务器:PHP - 7.4 MariaDB - 10.2 InnoDB结构和主键相同 - 检查所有表$user_id, $id, $date, $summ - 是变量,我通过 POST 方法得到。询问:if ($result = $link->prepare("INSERT INTO sb_user_checks (user_id, check_id, date_update, summ, updated_by)     SELECT ?, ?, ?, ?, 'You'    WHERE NOT EXISTS (SELECT date_update FROM sb_user_checks WHERE user_id=? AND check_id=? AND date_update=?)    ")) {         $result->bind_param('iisiiis', $user_id, $id, $date, $summ, $user_id, $id, $date);        $result->execute();        if (mysqli_affected_rows($link)>0) {echo 'added';}        $result->close();    } 我收到以下错误:#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的“WHERE NOT EXISTS (SELECT date_update FROM sb_user_checks WHERE user_i”附近使用正确的语法是否与 MySQL 版本有关,或者它是不正确的查询?但是,再次,它在 MAMP 上正常工作。
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

DUAL在 MySQL 中,我相信 MariaDB,当语法需要但整体逻辑不需要时,查询可以用作表的替代品。例如,在这种情况下:

SELECT ?, ?, ?, ?, 'You'
FROM DUAL
WHERE NOT EXISTS ...

DUAL 的作用类似于单行无列表;并且实际上只是作为此类场景的替代品。这些因素有许多影响:

  • 它不能与 SELECT * 一起使用

  • 它不能被别名

  • 它不能加入。

  • 更多...这些限制只是我在编写此答案时通过手动运行快速测试发现的限制。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信