Попытка исправить это INSERT UPDATE в запросе DUPLICATE

Удаление элемента скрипта ничего не делает. Если вы каким-то образом можете получить доступ к элементу скрипта, он был выполнен давно, и его удаление не будет иметь никакого эффекта.

Поэтому нам нужно обойти это. Если ваш элемент сценария находится в верхней части страницы:

<head>
    <script src="yourscript.js"></script>

Вы можете сделать синхронный запрос ajax на одну и ту же страницу, чтобы вы могли анализировать его содержимое в новый документ, изменять весь скрипт теги, а затем заменить текущий документ на измененный документ.

var xhr = new XMLHttpRequest,
    content,
    doc,
    scripts;

xhr.open( "GET", document.URL, false );
xhr.send(null);
content = xhr.responseText;

doc = document.implementation.createHTMLDocument(""+(document.title || ""));

doc.open();
doc.write(content);
doc.close();


scripts = doc.getElementsByTagName("script");
//Modify scripts as you please
[].forEach.call( scripts, function( script ) {
    script.removeAttribute("src");
    script.innerHTML = 'alert("hello world");';
});

//Doing this will activate all the modified scripts and the "old page" will be gone as the document is replaced
document.replaceChild( document.importNode(doc.documentElement, true), document.documentElement);

К сожалению, это невозможно установить в jsfiddle или jsbin. Но вы должны иметь возможность скопировать этот код точно так же, как на консоль этой страницы в google chrome. Вы должны увидеть предупреждения, и когда вы проверите живое dom, каждый скрипт был изменен.

Разница заключается в том, что мы запускаем это после того, как скрипты были выполнены на странице, поэтому старые сценарии все равно должны иметь рабочий эффект на странице. Вот почему для этого вам нужно быть первым скриптом на странице, чтобы сделать это.

Протестировано для работы в google chrome. По какой-то причине Firefox полностью игнорирует вызов doc.write.

0
задан John 27 February 2019 в 03:42
поделиться

1 ответ

В запросе на обновление дубликата ключа имеет немного другой синтаксис :

INSERT INTO  selfesteemscore (
      selestscore
    , UserID
) VALUES(
      'NEW VALUE'
    , 'NEW USER ID VALUE'
)
ON DUPLICATE KEY UPDATE 
      selestscore = 'NEW VALUE'
    , UserID = 'NEW USER ID VALUE'
;

Или лучше, чтобы не повторять новые значения дважды:

INSERT INTO  selfesteemscore (
      selestscore
    , UserID
) VALUES(
      'NEW VALUE'
    , 'NEW USER ID VALUE'
)
ON DUPLICATE KEY UPDATE 
      selestscore = VALUES(selestscore)
    , UserID = VALUES(UserID)
;

ПРЕДУПРЕЖДЕНИЕ: читайте об SQL-инъекциях и escape-значениях или используйте операторы prapered.

P.S. Вы инициализируете переменную $ userId, но позже используете переменную $ userID

0
ответ дан fifonik 27 February 2019 в 03:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: