HTML and CSS Reference
In-Depth Information
Die Funktion statementSuccessCallback wird also nach geglücktem Ausführen des
SQL-Statements aufgerufen. Da Sie innerhalb dieser Transaktion nur ein SQL-Statement
ausführen, hätten Sie genauso gut das successCallback der Transaktion benutzen
können. Das statementErrorCallback wird natürlich aufgerufen, wenn das State-
ment nicht geglückt ist.
Während beide Callbacks die aktuelle Transaktion (durch die z. B. erneut SQL ausge-
führt werden kann, eventuell um einen Fehler in einer Fehlertabelle zu loggen) überge-
ben bekommen, wird an das statementSuccessCallback als zweiter Parameter ein
SQLResultSet -Objekt übergeben, an das statementErrorCallback jedoch ein
SQLError -Objekt.
Das SQLResultSet -Objekt ist in obigem Beispiel nicht von Bedeutung, da wir die
Datenbank nicht abgefragt haben. Im nächsten Abschnitt gehen wir jedoch darauf ein.
Betrachten wir zunächst noch dieses SQL-Statement, das Ihnen sicherlich aufgefallen ist:
INSERT INTO notes (note) VALUES (?);
Das ? stellt dabei einen Platzhalter dar, eine Art Makro, das später von der API aufgelöst
wird. An die Stelle des ? wird ein Wert eingefügt, der in einem JavaScript-Array des
zweiten Parameters an gleicher Position enthalten sein muss. In diesem Beispiel wird
nur ein einziger Platzhalter benutzt, also darf das Array auch nur ein Element enthalten:
var newNoteText 'Neue Notiz...';
...
t.executeSql('INSERT INTO notes (note) VALUES (?);',
[newNoteText],
statementSuccessCallback,
statementErrorCallback);
2.7.7 SQL Injection
Um die neue Notiz in die Datenbank zu speichern, haben wir uns bewusst für ein SQL-
Statement mit Platzhalter (?) entschieden. Die Platzhalter werden der Reihe nach durch
die Elemente eines im zweiten Parameter angegebenen Arrays ersetzt.
t.executeSql('INSERT INTO notes (note) VALUES (?);', [newNoteText], ...
Im Vergleich dazu hätten wir das INSERT -Statement auch durch Zusammenfügen
erstellen können:
t.executeSql('INSERT INTO notes (note) VALUES (\'+newNoteText+\');', null,
...
Das birgt zweierlei Probleme: Zunächst wird das SQL-Statement durch das nun not-
wendige Escaping der ' relativ unleserlich. Das ließe sich noch teilweise lösen, indem für
den eigentlichen String in JavaScript doppelte Anführungszeichen verwendet würden:
t.executeSql("INSERT INTO notes (note) VALUES ('"+newNoteText+"');", null,
...
Search WWH ::




Custom Search