在重复键更新上插入...不适用于php,但可直接在MySQL上运行

时间:2019-02-28 12:32:50

标签: php mysql mysqli

$sql = "SET @tag_name = '$tag_value',
    @tag_link = '$tag_link',
    @user_value = '$user_value';
INSERT INTO urls_unis
    (tag_name, tag_link, user_data)
VALUES
    (@tag_name, @tag_link, @user_value)
ON DUPLICATE KEY UPDATE
    tag_name = @tag_name,
    tag_link = @tag_link,
    user_data = @user_value;
    ";

    if(mysqli_query($link, $sql)){
        echo "Records inserted successfully.";
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
    }

上面的代码返回这个:

  

错误:无法执行
  SET @tag_name ='查看历史记录',@tag_link ='zNIL',@user_value ='/w/index.php?title=Non-volatile_random-access_memory&action=history';将INSERT INTO urls_unis(tag_name,tag_link,user_data)值(@ tag_name,@ tag_link,@ user_value)设置为重复密钥更新tag_name = @ tag_name,tag_link = @ tag_link,user_data = @user_value; 。

     

您的SQL语法有错误;在第4行的“ INSERT INTO urls_unis(tag_name,tag_link,user_data)VALUES(@tag_name)”附近检查与MySQL服务器版本相对应的手册以使用正确的语法

当我将mysql查询复制并粘贴到phpmyadmin来执行它时,它工作正常。没有错误返回。

为什么会出现,我该如何解决?

1 个答案:

答案 0 :(得分:1)

您不能在单个查询中运行多个查询行。您需要单独运行它们或使用inner class。您可以通过仅使用变量来避免所有这些情况,而无需先经过设置MySQL变量的过程。

更好的是,您将使用准备好的语句,而不是将变量直接注入查询中。因为您使用了两次值,并且MySQLi不支持命名占位符,所以我们必须将每个变量绑定两次。

mysqli_multi_query()