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,
...