【问题标题】:SQL Replace or Insert Into Syntax errorSQL 替换或插入语法错误
【发布时间】:2015-09-25 11:28:50
【问题描述】:

我不知道出了什么问题。我的查询如下所示:

INSERT OR REPLACE INTO lang (name, string, lang) VALUES ('PAGE_TITLE', 'Page Title', 'en')

这就是我执行该查询的地方:

foreach($lang_fields as $field){
    $update = "INSERT OR REPLACE INTO lang (name, string, lang) 
            VALUES ('".mysqli_real_escape_string($conn, $field)."', 
                    '".mysqli_real_escape_string($conn, $_POST[$field])."', 
                    '".mysqli_real_escape_string($conn, $_POST['lang_load'])."')";
    echo $update;
    $sql = mysqli_query($conn, $update)
        or die(mysqli_error($conn));
}

这是错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'OR REPLACE INTO lang (name, string, lang) VALUES ('PAGE_TITLE', 'P' at line 1

附近使用正确的语法

【问题讨论】:

标签: php mysql sql syntax


【解决方案1】:

MySQL 不支持我见过的任何INSERT OR REPLACE INTO 语法。您可能正在寻找类似INSERT INTO ... ON DUPLICATE KEY UPDATE 的东西。在您的示例中,它可能如下所示:

INSERT INTO myTable (name, string, lang) VALUES (param1, param2, param3)
ON DUPLICATE KEY UPDATE name = param1, string = param2, lang = param3;

可以在此处的文档中找到更多信息:https://dev.mysql.com/doc/refman/5.0/en/insert.html

可以使用SQL Fiddle 找到一个示例。

【讨论】:

  • 是的,我在看SQLite资源,好像MySQL不支持这个。谢谢。
  • @TemporaryName 没问题。如果此答案对您有用,请随时投票并接受答案。如果您无法使其正常工作,请询问。
  • 我正在努力实现这一点。该代码刚刚在我的表中插入了 2000 行,它可能没有检测到重复的键。知道为什么吗?
  • 哪一栏是你的钥匙?你确定有重复吗?
  • 我用你的回答和更多的 php 解决了这个问题。
猜你喜欢
  • 2014-05-25
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2017-10-18
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多