вставка ... при обновлении дублированного ключа не работает с PHP, но работает непосредственно на MySQL - PullRequest
0 голосов
/ 28 февраля 2019
$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, на предмет правильного синтаксиса для использования рядом с 'INSERT INTO urls_unis (tag_name, tag_link, user_data) VALUES (@tag_name,' в строке 4

Когда я копирую ивставьте запрос mysql в phpmyadmin для его выполнения, он работает нормально. Ошибки не возвращаются.

Почему и как я могу решить эту проблему?

1 Ответ

0 голосов
/ 28 февраля 2019

Вы не можете запустить несколько керилинов в одном запросе.Вам нужно запустить их отдельно или использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...