Sqlite Variablen in Datenbank einfügen
-
@ENDER du musst prepare und bind verwenden.
https://www.sqlite.org/c3ref/bind_blob.html
-
@DocShoe Also das mit den Hochkammata habe ich nicht gemeint, aber prepared statments ist glaube ich das richtige
-
@ENDER Ich glaube dass es auch erstmal wichtig ist zu verstehen wieso das so wie du es versucht hast schonmal grundsätzlich nicht gehen kann. Die SQLite Library kann nämlich die Variable
newName
nicht kennen - weder ihren Namen noch ihren Inhalt. D.h. ohne etwas was du explizit aufrufst, mit der du der Library diese Variable sozusagen "bekannt machst", kann es einfach nicht gehen.Und wie du es lösen kannst wurde ja bereits geschrieben.
-
@hustbaer Vielen dank, das habe ich jetzt verstanden. Ich habe erst vorgestern angefangen mich mit Sqlite zu beschäftigen und ich muss sagen, dass es für den Anfang echt verwirrend ist. Aber jetzt geht es langsam
-
@ENDER sagte in Sqlite Variablen in Datenbank einfügen:
@hustbaer Vielen dank, das habe ich jetzt verstanden. Ich habe erst vorgestern angefangen mich mit Sqlite zu beschäftigen und ich muss sagen, dass es für den Anfang echt verwirrend ist. Aber jetzt geht es langsam
Nur als Hinweis: das hat nichts mit SQLite zu tun, sondern gilt generell für alle Datenbanken. Lies dir mal https://de.wikipedia.org/wiki/SQL-Injection durch.
-
@wob @ENDER
Das was ich meine hat generell mit C bzw. C++ zu tun. Vielleicht hilft ein Beispiel:void myFunction() { int myVariable = 42; someOtherFunction("PRINT $myVariable"); }
@wob ich weiss dass du das folgende weisst, ich tagge dich nur weil hier anscheinend ein Misverständnis besteht darüber was ich gemeint hatte.
Disclaimer: ich beziehe mich hier auf Standardmittel, also auf das was der C bzw. C++ Standard garantiert. Wenn man wild zu tricksen anfängt, nonstandard Mittel verwendet und ein wenig IB/UB riskiert, dann geht sowas vermutlich schon -- aber auch nur unter ganz bestimmten Bedingungen die ziemlich realitätsfremd sind (z.B. kompilieren ohne Optimierungen + mit ausliefern des .PDB/.DBG Files + Einsatz von Reverse-Engineering Libraries).
Im gezeigten Code ist es völlig unmöglich dass
someOtherFunction
irgendwie Kenntnis von/Zugriff aufmyVariable
hat. Es kann also auch unmöglich funktionieren dasssomeOtherFunction
hier irgendwie den Wert vonmyVariable
ausgibt. Um das sagen zu können muss mansomeOtherFunction
nicht kennen und nichtmal wissen in welcher SprachesomeOtherFunction
implementiert ist. Es reicht dass man weiss das der gezeigte Code C oder C++ ist.Einmal weil man in C bzw. C++ einfach keine Variablen per Name irgendwie ausfindig machen kann. Und dann auch noch weil du als C bzw. C++ Funktion keinen Zugriff auf den Scope hast in dem du aufgerufen worden bist -- und
myVariable
schliesslich in diesem Scope lebt.Damit das gezeigte Beispiel wie gedacht funktionieren kann mus man also der anderen Funktion irgendwie sagen dass es hier eine Variable namens
myVariable
gibt und was deren Inhalt ist (bzw. es wäre auch möglich statt dessen Typ + Adresse bekannt zu machen, aber das vergessen wir mal).Das kann z.B. so aussehen:
void myFunction() { int myVariable = 42; SomeObject obj; obj.defineVariable("myVariable", myVariable); obj.someOtherFunction("PRINT $myVariable"); }
Natürlich kann man das mit etwas Makro-Schweinerei auf sowas zusammendampfen:
void myFunction() { int myVariable = 42; SOME_MACRO("PRINT $myVariable", myVariable); }
Ohne die Erwähnung von
myVariable
beim Aufruf wird es aber nie und nimmer funktionieren können.
-
Dafür existiert der 1.Parameter in callback und der 4. in sqlite3_exec.
-
@Wutz Es geht hier um Query-Parameter.
-
Dazu sind - wie oben erwähnt - Bindingvariablen da, mit dem entsprechenden API Funktionen.
-
Ist mir schon klar. Ich verstehe bloss deinen Beitrag
@Wutz sagte in Sqlite Variablen in Datenbank einfügen:
Dafür existiert der 1.Parameter in callback und der 4. in sqlite3_exec.
nicht. Weil der nichts mit dem hier Diskutierten zu tun hat.