in einer Nussschale Ich programmiere als Hobby. Ich versuche, Daten in eine SQLite-Datenbank in Safari 5 EINFÜGEN.Safari 5: Javascript sqlite 'einfügen Transaktion' scheint nicht in-scope-Variablen korrekt zu sehen
Ich mache mir keine Sorgen über Injektionsangriffe, da mit einer selbstgebackenen Erweiterung, dies ist nur für meine Verwendung von Daten von einigen Websites, die ich besuche.
Meine Tranaktion fügt eine Zeile pro Iteration einer Schleife ein, die Daten aus einem 'DOM Change Event' für bis zu 20 oder mehr Iterationen enthält. Die Variablen werden nicht korrekt an sie übergeben. Das Aufrufen von 'console.log (variable)' zeigt an, dass sie die korrekten Daten enthalten - aber INSERTs fügen nicht die korrekten (unterschiedlichen) Daten pro Datensatz ein, außer der ersten var, die korrekt inkrementiert (über meinen eigenen Inkrementmechanismus, der in ist) derselbe Umfang wie die anderen sich schlecht benehmenden vars).
Ich habe gelesen, dass "Arbeiter" wichtig sind, aber nichts über sie wissen.
N.B. Windows 7 Pro
Alle Zeiger dankbar erhalten - danke.
enter code here: HandleDOM_Change = function() {
for (p=0; p<snip.length; p++) {
title = snip[p].getElementsByClassName('title')[0].firstChild.textContent;
value = snip[p].getElementsByClassName('value')[0].firstChild.textContent;
lang = snip[p].getElementsByClassName('lang')[0].textContent;
if (hP[p] != lang) {
++count;
id = count;
db.transaction(function (tx) {
console.log("events:" +events+ " title:" +title+ " value/p+1/lang: " +value+ ", " +(p+1)+ ", " +lang);
tx.executeSql('INSERT INTO foo (id, text, time, name) VALUES (?, ?, ?, ?)', [id, title, value, lang]);
},myTransactionErrorCallback,myTransactionSuccessCallback);
hP[p] = lang;
}
}
++events;
}
// Globale Variablen: Ereignisse INTEGER, ARRAY schnippeln, zählen INTEGER Bitte dumme Syntax Probleme entschuldigen - ich hatte einige Spreu entfernen sie lesbar zu machen - aber die Essenz bleibt Die Konsolenprotokolle melden, dass die Variablen enthalten, was ich will, aber 'tx.executeSql' sagt nein.
N.B. Bei dem Versuch, das Problem zu finden, wurden alle Bedingungen aus den eingefügten Werten entfernt - nicht einmal ein Primärschlüssel wird in der Deklaration verlangt (was früher auf der globalen Ebene geschieht). Um es klarzustellen, "id" wird richtig inkrementiert und als solches in der db aufgezeichnet, aber die anderen drei werden mit einem unveränderlichen Wert eingefügt - im Gegensatz zum Protokollbericht (ich habe festgestellt, dass das Protokoll die ID nicht ausgibt, aber es tat vor der Reinigung - ehrlich).
Vielen Dank.
Sie müssen Ihren Code möglicherweise posten, um uns zu helfen. – thirtydot
Willkommen bei StackOverflow. Ein paar Hinweise ... Wenn du bleiben willst, melde dich bitte an. Ich habe Ihre zwei nicht registrierten Konten zusammengeführt (es ist einfach, mehrere Konten versehentlich zu erstellen, wenn Sie nicht registriert sind). Außerdem können Sie Ihre Frage jederzeit bearbeiten, um zusätzliche Informationen hinzuzufügen. Schließlich können Sie in ein paar Tagen Ihre Antwort als Lösung auswählen. Scheint etwas merkwürdig, aber so machen wir Dinge um diese Teile herum. – Will