【问题标题】:insert...on duplicate key update does not work with php, but works directly on MySQLinsert...on duplicate key update 不适用于 php,但可直接在 MySQL 上使用
【发布时间】:2019-02-28 20:49:35
【问题描述】:
$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) VALUES (@tag_name, @tag_link, @user_value) ON DUPLICATE KEY UPDATE tag_name = @tag_name, tag_link = @tag_link, user_data = @user_value; .

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

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

这是怎么回事,我该如何解决?

【问题讨论】:

  • 您不能在单个查询中运行多个查询行。您需要单独运行它们或使用mysqli_multi_query()

标签: php mysql mysqli


【解决方案1】:

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

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

$sql = "INSERT INTO urls_unis (tag_name, tag_link, user_data)
    VALUES
        (?, ?, ?)
    ON DUPLICATE KEY UPDATE
        tag_name = ?,
        tag_link = ?,
        user_data = ?;";

$stmt = $link->prepare($sql);
$stmt->bind_param("ssssss", $tag_value, $tag_link, $user_value, 
                            $tag_value, $tag_link, $user_value);
if ($stmt->execute()){
    echo "Records inserted successfully.";
} else{
    echo "ERROR: Could not able to execute $sql<br />";
    echo $stmt->error;
}
$stmt->close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2017-02-21
    • 2011-08-09
    • 2023-02-06
    • 2015-01-20
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多