Sqlite Abfrage mit Fragezeichen
Ich habe einen Zweifel in die SQLite
Abfrage..ich habe eine Tabelle mit vier Zeilen und drei Spalten in einige Beispiel-code der iOS-sqlite-Datenbank .
und ich bin das abrufen von Daten aus der Tabelle mit der Abfrage :-
Select * from table where column_name=? ;
Problem habe ich mit der column_name=?
nach dem Beispiel-code ..was bedeutet das ? bedeutet ..
ist es in Inkrementieren der Zeilen ?
- setzen Sie hier den Namen der Spalte
- ? - Platzhalter für den realen Wert
- aber wo es das wirkliche Wert? bcz wir sind nicht mit like "%@" im string zu übergeben realen Wert
- Genau Ihre Frage nicht klar, so sagen Sie mir bitte, was willst du genau.. ?
- Ich möchte nur wissen, was dieser Abfrage erhalten Ausgang und warum verwenden wir "?" in Sqlite
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den ? ist ein Platzhalter für einen realen Wert, einen Wert gebunden werden muss, um die kompilierte Anweisung. Diese link geht ins detail über die binden.
Den Grund binden Sie die Werte, anstatt nur legte Sie in den query-string ist, weil es schützt vor sql-injection-Angriffe - was passieren könnte, wenn Sie Werte, die Ihnen direkt von dem Benutzer.
Den
?
stellt einen Platzhalter, Sie werden binden, mit einem Wert (z.B. um einen text-Wert, verwenden Siesqlite3_bind_text
nachdem Siesqlite3_prepare_v2
die Aussage, aber bevor Sie es ausführen mitsqlite3_step
.Sehen
sqlite3_bind
Dokumentation.Dies ist ein sehr wichtiges Konstrukt, um zu wissen und zu verwenden, weil Sie nie wollen, bauen Sie Ihren SQL-Anweisungen mit
stringWithFormat
. Durch die Verwendungsqlite3_bind
sparen Sie sich aus mit, um code zu schreiben, welches alle Anführungszeichen, die Sie vielleicht in Ihrem input, z.B. versucht man, Werte einfügen vonJoe's Bar and Grill
(wo der Apostroph wird mess up your SQL wenn Sie einfache Anführungszeichen) oderDwayne "The Rock" Johnson
(wobei die Anführungszeichen wird mess up your SQL wenn Sie doppelte Anführungszeichen). Es schützt Sie auch vor SQL-injection-Angriffe. Auf jeden Fall nutzensqlite3_bind
anstatt SQL-Anweisungen manuell.Ich hoffe es kann dir helfen... "? " - Zeichen verwendet....
Diese Regel impliziert eine vorbereitete Anweisung, in denen die Parameter angegeben sind später.
(siehe z.B. http://en.wikipedia.org/wiki/Prepared_statements#Parameterized_statements).
ODER
In einigen Aussagen, Parameter unbekannt sind, wenn die Anweisung vorbereitet, weil ein anderer Wert eingefügt werden kann, die jedes mal, wenn die Anweisung ausgeführt wird. In diesen Anweisungen verwenden, können Sie ein Fragezeichen ( ? ) Platzhalter, wo ein parameter muss angegeben werden, wenn die Anweisung ausgeführt wird.
ODER
Obwohl PreparedStatement-Objekte können verwendet werden für SQL-Anweisungen ohne Parameter, die Sie wahrscheinlich am häufigsten für SQL-Anweisungen, die die Parameter annehmen. Der Vorteil der Verwendung von SQL-Anweisungen, die Parameter übernehmen, ist, dass Sie verwenden können, die gleiche Aussage und stellen Sie es mit verschiedenen Werten jedes mal, wenn Sie es ausführen.