HTML and CSS Reference
In-Depth Information
Leider gibt es aber immer noch ein gravierendes Problem. Was, wenn der Benutzer bei-
spielsweise dies als newNoteText in eine Textbox eintippt:
'); DROP TABLE notes;
Sie haben es erahnt: Durch diese Eingabe würde neben dem ersten INSERT -Statement,
das hier irrelevant ist, ein zweites Stück SQL ausgeführt - in diesem Fall DROP TABLE
notes; , das die gesamte notes -Tabelle löscht. Die beiden Bindestriche am Ende der
Eingabe sorgen dafür, dass der restliche Text des Statements als Kommentar von SQLite
ignoriert wird.
Wenn die Daten, die Sie in der Datenbank speichern, nicht mit einem Server synchroni-
siert werden, schadet sich der Nutzer damit selbst. Das mag eventuell noch kein Problem
darstellen, was aber, wenn die clientseitigen Daten synchronisiert und serverseitig
weitere Operationen ausgeführt werden?
Prinzipiell sollten Sie daher vom Benutzer erlangte Informationen wie Texte aus Einga-
befeldern nur mithilfe von Platzhaltern in SQL-Statements einfügen. SQLite kann so die
Textdaten automatisch escapen, falls notwendig.
2.7.8 Daten aktualisieren
Um bestehende Daten zu aktualisieren, müssen Sie das SQL UPDATE -Statement verwen-
den. Der Gebrauch unterscheidet sich im Wesentlichen nur durch das auszuführende
SQL. Allerdings können wir zum ersten Mal von dem an das
statementSuccessCallback übergebenen SQLResult -Objekt Gebrauch machen, wie
der Kommentar andeuten soll:
var statementSuccessCallback function(t, resultSet){
//resultSet.rowsAffected 1
}
var statementErrorCallback ...
db.transaction(function(t){
t.executeSql('UPDATE notes set note ?, date CURRENT TIMESTAMP WHERE
id ?;', [newNoteText, selected], statementSuccessCallback,
statementErrorCallback);
});
Innerhalb das UPDATE SQL -Statements benutzen Sie nun zwei Platzhalter. Der erste
wird den aktualisierten Text der Notiz enthalten, während der zweite Platzhalter in der
WHERE -Klausel des SQL-Statements benutzt wird, um eindeutig die zu aktualisierende
Notiz per id zu bestimmen. Das Array, der zweite Parameter an die executeSQL() -
Methode, enthält nun folglich auch zwei Elemente: den neuen Text sowie die id der zu
aktualisierenden Zeile in der Tabelle.
Einen ersten Gebrauch können wir nun auch von dem resultSet -Objekt machen.
Eines der Attribute ist rowsAffected , das die Anzahl der Tabellenzeilen zurückliefert,
die verändert worden sind (das trifft also nur auf INSERT -, UPDATE - und DELETE -State-
ments zu).
Search WWH ::




Custom Search