【问题标题】:Insert into MySQL "on duplicate key update" syntax error插入 MySQL“重复键更新”语法错误
【发布时间】:2018-06-08 15:31:50
【问题描述】:
$sql = "INSERT INTO couponentries (itemid, coupon, MSISDN, channel, result) 
       VALUES ('".$itemid."','".$CouponCode."', '".$MSISDN."','".$channel."','".$status."')
       ON DUPLICATE KEY UPDATE couponentries.result = VALUES('Invalid couponcode[ERR: Already exists]')";

我正在尝试将新项目从 PHP 网络表单插入到 MySQL 数据库。如果我插入重复的行,我会将结果更新为错误消息。这是我的代码。它一直给我一个语法错误。

错误:无法执行您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“无效优惠券代码[ERR:已存在]”附近使用正确的语法

【问题讨论】:

  • ... UPDATE couponentries.result = 'Invalid couponcode[ERR: Already exists]'
  • ON DUPLICATE KEY UPDATE 不是您尝试的正确工具。恐怕——这根本不可能。您只是不能插入重复项。
  • @PaulSpiegl 如果只有一个字段相同但其余字段都不同,是否可以插入重复项?在这里,在这种情况下,它只是同一张优惠券。它还能做到吗?
  • 这取决于唯一键。发布您的表架构 (SHOW CREATE TABLE couponentries)。
  • @PaulSpiegel 谢谢!我删除了唯一键约束。但是,它仍然不会将错误消息更新为新的重复条目。斗争是真实的!

标签: php mysql sql syntax-error sql-insert


【解决方案1】:

您正在使用字符串文字来更新您的列 - 丢失 values:

$sql = "INSERT INTO couponentries (itemid, coupon, MSISDN, channel, result) 
       VALUES ('".$itemid."','".$CouponCode."', '".$MSISDN."','".$channel."','".$status."')
       ON DUPLICATE KEY UPDATE couponentries.result = 'Invalid couponcode[ERR: Already exists]'";

强制性旁注:
像这样连接字符串会使您的代码容易受到 SQL 注入攻击。您可能应该查看Prepared Statements

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2023-03-19
    • 2018-07-04
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多