AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL direct - String in Datenbank-Feld eintragen
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL direct - String in Datenbank-Feld eintragen

Ein Thema von Mb123 · begonnen am 3. Aug 2008 · letzter Beitrag vom 5. Aug 2008
Antwort Antwort
Mb123

Registriert seit: 7. Jun 2006
33 Beiträge
 
#1

MySQL direct - String in Datenbank-Feld eintragen

  Alt 3. Aug 2008, 16:11
Datenbank: MySQL • Zugriff über: MySQL direct
Hallo,
Ich habe folgendes Problem, ich lese die Ip des Computer in einen string ein:
ip:=WebBrowser1.OleObject.Document.Body.InnerHtml; Diese Ip möchte ich nun mit folgendem SQL-Statement in die Datenbank schreiben:
  q := ' INSERT INTO test (ip,uhr,aktion) VALUES('+ip+',NOW(),0);'; Ich kriege nun den Fehler, dass irgendwas an der SQL-Syntax nicht stimmt. Ich habe das Feld ip
in der Datenbank als VarChar vorliegen. Das Problem ist wahrscheinlich, dass man einen string
nicht ohne weiteres in ein VarChar-Feld eintragen kann

Muss ich vielleicht einfach den Typ des Ip-Feldes ändern ?

Danke für eure Antworten !
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: MySQL direct - String in Datenbank-Feld eintragen

  Alt 3. Aug 2008, 16:15
Stringfelder musst du Quoten oder (SQL-)Parameter verwenden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: MySQL direct - String in Datenbank-Feld eintragen

  Alt 3. Aug 2008, 16:17
Wenn es ein String ist dann mußt du es auch SQL-Technisch in Hochkommas vorliegen.

q := ' INSERT INTO test (ip,uhr,aktion) VALUES('''+ip+''',NOW(),0);'; Bau aber deine Statement auf preparet statements um denn sonst hast du SQL-Injection-Probleme wenn der InnerHTML ein ergebnis der Art:

'; DROP Database... liefert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Mb123

Registriert seit: 7. Jun 2006
33 Beiträge
 
#4

Re: MySQL direct - String in Datenbank-Feld eintragen

  Alt 3. Aug 2008, 16:23
Okay bestens. An den Hochkommas hats gelegen.
Vielen Dank für die schnellen Antworten.
  Mit Zitat antworten Zitat
Mb123

Registriert seit: 7. Jun 2006
33 Beiträge
 
#5

Re: MySQL direct - String in Datenbank-Feld eintragen

  Alt 5. Aug 2008, 12:46
ich hätte da nochmal ein kleines problem:
die SQL-Syntax von Like ist ja wie folgt:
SELECT aktion FROM test WHERE ip LIKE 'ip' Wenn ich ip jetzt als globale Variable deklariert hab, wie binde ich das dann (mit Hochkomma etc.) in den delphi code ein ?
q := ' SELECT aktion FROM test WHERE ip LIKE '''+ip+''''; Diese Variante klappt nämlich nicht
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: MySQL direct - String in Datenbank-Feld eintragen

  Alt 5. Aug 2008, 12:51
q := ' SELECT aktion FROM test WHERE ip LIKE '+QuotedStr(ip);
Markus Kinzler
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: MySQL direct - String in Datenbank-Feld eintragen

  Alt 5. Aug 2008, 13:01
Zitat von Mb123:
q := ' SELECT aktion FROM test WHERE ip LIKE '''+ip+'''';
auch das sollte gehen, ist doch eig nix anderes als die funktion QuotedStr

... du solltest aber beim like noch die Wildcards mit angeben, also wenn du zB nach einem Text suchst, in welchem die IP irgendwo drin vorkommt, dann so:

  q := ' SELECT aktion FROM test WHERE ip LIKE ''%'+ip+'%''';
Ob die Variable lokal oder global ist, ist egal

[edit] Kommt bei dir überhaupt eine Fehlermeldung, oder kommen einfach nur keine Datensätze zurück? Wenn nur keine Datensätze zurückkommen liegt das daran, dass du die Wildcards nicht gesetzt hast. Beispiel:

Eine Tabelle namens Namen beinhaltet das Feld Name mit foigenden Einträgen:

Peter
Erna
Ansgar
Martin
Klaus
Andrea


Select Name from Namen where Name like 'e' die Abfrage gibt nichts zurück, da es kein Feld gibt in dem nur und ausschließlich ein e steht

Select Name from Namen where Name like '%e%' Diese Abfrage sucht alle Datensätze in denen irgendwo ein 'e' vorkommt gibt folgende Datensätze zurück:

Peter
Andrea

Select Name from Namen where Name like '%a' Diese Abfrage gibt nur Datensäze zurück die mit einem a aufhören, also:

Erna
Andrea



Den Rest der Sntax nun aber mal selber nachlesen Ich hoffe geholfen zu haben
Ansgar
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz