Variablen in SQlite-Datenbank schreiben

Startseite Foren Deutsches LiveCode-Forum Variablen in SQlite-Datenbank schreiben

Ansicht von 6 Antwort-Themen
  • Autor
    Beiträge
    • #17062
      Radmuehl
      Teilnehmer

      Liebe Forumsmitglieder,

      ich bin gerade dabei mich mit SQLite-Datenbanken zu beschäftigen und habe hierfür ein Beispiel aus dem Internet verwendet. Das typische, eine Adressdatenbank. Wenn ich die Inhalte per Zeichen in die Datenbank schreibe funktioniert es. Wenn ich sie vorher in eine Variable schreibe geht es nicht. Die Variablen werden nicht in die Datenbank eingetragen. Wo liegt mein Denkfehler?

      global gNachname
      global gVorname
      global gTelefon
      
      on mouseup
         Put "Mustermann" into gNachname
         Put "Karl" into gVorname
         Put "01234" into gTelefon
        
         put revOpenDatabase ("sqlite","d:personendb.db", , , , ) into dbid
        
        -- (das funktioniert) put "insert into personendaten (nachname, vorname, telefon) VALUES ('Mustermann','Karl', '01234567')" into sql revExecuteSQL dbid, sql
        -- (das funktioniert nicht) put "insert into personendaten (nachname, vorname, telefon) VALUES (gNachname,gVorname, gTelefon)" into sql revExecuteSQL dbid, sql
          -- (das funktioniert nicht) put "insert into personendaten (nachname, vorname, telefon) VALUES (" & "'" & gNachname & "', " & "'" & gVorname & "')" into sql revExecuteSQL dbid, sql
          revCloseDatabase dbid
      end mouseup
      

      Viele Grüße
      Radmühl

    • #17064
      Klaus Major
      Moderator

      Hallo Radmühl,

      das sollte so funktionieren, wir benutzen Platzhalter für die Variablen, was auch ein gutes Mittel gegen "SQL Injection" sei, wie ich gehört habe, lies mal unter "revExecuteSQL" im Dictionary nach:

      ...
      put "insert into personendaten (nachname, vorname, telefon) VALUES (:1,:2,:3)" into tSql
      
      ## Im SQL stehen nun die Platzhalter und erst im revExecuteSql Befehl übergeben 
      ## wir die "echten" Werte, allerdings, etwas gewöhnungsbedürftig, in Anführungszeichen!
      ## LC übersetzt das dann alles für uns in korrektes SQL.
      revExecuteSQL dbid, tSql,"gNachname","gVorname","gTelefon"
      ...

      Zur Info:
      https://de.wikipedia.org/wiki/SQL-Injection

      Gruß

      Klaus

    • #17067
      Radmuehl
      Teilnehmer

      Hallo Klaus,

      danke, funktioniert einwandfrei. Ist zwar anders als ich es bisher kannte, aber man gewöhnt sich daran. Habe früher alles mit DBase-Datenbanken gemacht.

      Gruß

      Radmühl

    • #17069
      Klaus Major
      Moderator

      Diesen Trick kannte ich bisher auch nicht.
      Ist aber möglicherweise auch ein spezielles und gut durchdachtes LC Feature.

    • #17071
      Klaus Major
      Moderator

      Hier noch ein älteres Posting von mir, es geht um ein paar praktische Funktionen
      (nicht nur) beim Umgang mit Datenbanken und Anführungszeichen:
      http://www.livecode-blog.de/forums/topic/einfacher-login-mit-mysql-datenbank/#post-14842

    • #17073
      Radmuehl
      Teilnehmer

      Hallo Klaus,

      da hast Du mich falsch verstanden oder ich habe mich falsch ausgedrückt. Ich komme aus der XProfan Ecke. Da habe ich alles mit DBase-Datenbanken gemacht.

      Ich fange jetzt mit Livecode an, weil es hier möglich ist Apps fürs Handy zu erstellen. Ich muss sagen, dass mir die Oberfläche Spaß macht. Ich habe es gerade realsiert, dass meine Daten jetzt in einer Liste angezeigt werden. Das nächste was dann noch kommt, ist das ausrechnen von Gesamtsummen der jeweiligen Zeilen.

      Ich hoffe dass das von mir bestellte Buch pünktlich erscheint. Ich freue mich schon sehr wenn es endlich kommt.

      Viele Grüße
      Radmühl

    • #17075
      Klaus Major
      Moderator

      Ich habe Dich schon richtig verstanden, wollte nur auf meine nützliche Funktion hinweisen.
      Daher schrieb ich: ...(nicht nur) beim Umgang mit Datenbanken...

      Ob Du sie benutzt, überlasse ich ganz Dir! 🙂

Ansicht von 6 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.