【问题标题】:mysql ON DUPLICATE KEY not recognizedmysql ON DUPLICATE KEY 无法识别
【发布时间】:2016-09-04 06:11:22
【问题描述】:

此语句随机停止工作。我相信这是因为我使用的是 4.5.2 的新版本 WAMP。

INSERT INTO at_user_listing_settings (userID, rfID, userID_rfID, Watching) VALUES(177, 35888, '177_35888', '1') ON DUPLICATE KEY UPDATE Watching='1'

我收到此错误:

Unrecognized keyword. (near "ON" at position 138)
Unrecognized keyword. (near "DUPLICATE" at position 141)
Unrecognized keyword. (near "KEY" at position 151)

我似乎找不到语法有什么问题,ON DUPLICATE KEY 是否已更改或弃用?

【问题讨论】:

  • 你正在使用4.5.2什么
  • 在这个确切的查询中是否收到此错误??
  • 显示为输出:SELECT version();
  • 你确定你使用的是MYSQL吗?
  • 这是部分 PHP 代码,如果是的话显示 PHP 代码

标签: mysql phpmyadmin wampserver on-duplicate-key


【解决方案1】:

终于想通了。

当你下载新版本的 WAMP 时,它会默认将 mysql 设置为“严格”模式。我由hostgator托管的真实服务器必须有更宽松的限制。尝试在本地运行代码时,代码是正确的,但在尝试更新或插入数据库(也是本地)时,sql 语句遇到了问题。

例如,严格模式要求具有布尔值的列具有默认值。如果任何列没有默认值,则在尝试插入时会失败。最糟糕的是它不会返回 apache 或 php 错误,因此调试起来非常困难。它也不喜欢“ON DUPLICATE KEY”。

为了解决这个问题,我进入了 WAMP > MySQL > my.ini > 并寻找sql-mode="STRICT_ALL_TABLES"

然后我删除了STRICT_ALL_TABLES,一切都开始按预期运行。

【讨论】:

    【解决方案2】:

    这似乎是phpMyAdmin 问题!

    github errors that have been reported

    它看起来很旧,但我没有看到任何修复的参考,它仍然是开放的

    我们为一个名为Adminer, SourceForge download link here 的类似工具提供了一个插件,因为人们在使用 phpMyAdmin 时遇到了一些奇怪的问题

    下载它,它将直接安装到 WAMPServer 中,并出现在 WAMPServer 主页的“您的别名”菜单中

    【讨论】:

    • 我给你 +1 至少知道这是一个 phpmyadmin 问题而不是代码问题。虽然从技术上讲,这是一个 mysql 设置。
    【解决方案3】:

    只需将您的查询重写为:

    INSERT INTO at_user_listing_settings
    SET
      userID = 177,
      rfID = 35888,
      userID_rfID = '177_35888',
      Watching = '1'
    ON DUPLICATE KEY UPDATE
      Watching = '1'
    

    【讨论】:

    • 我尝试了上面的语句,但仍然得到类似的错误,这也说明了另一列。 “笔记”也许是导致问题的原因?错误:无法识别的关键字。 (位置 151 的“ON”附近)无法识别的关键字。 (在位置 154 的“DUPLICATE”附近)无法识别的关键字。 (在位置 164 的“KEY”附近)之前发现了一个别名。 (在位置 189 的“'1'”附近)#1364 - 字段 'Notes' 没有默认值我想知道最后一个错误部分是否与它有关......
    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多