![]() |
Datenbank: MySQL • Zugriff über: MySQL direct
MySQL direct - String in Datenbank-Feld eintragen
Hallo,
Ich habe folgendes Problem, ich lese die Ip des Computer in einen string ein:
Delphi-Quellcode:
Diese Ip möchte ich nun mit folgendem SQL-Statement in die Datenbank schreiben:
ip:=WebBrowser1.OleObject.Document.Body.InnerHtml;
Delphi-Quellcode:
Ich kriege nun den Fehler, dass irgendwas an der SQL-Syntax nicht stimmt. Ich habe das Feld ip
q := ' INSERT INTO test (ip,uhr,aktion) VALUES('+ip+',NOW(),0);';
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 ! |
Re: MySQL direct - String in Datenbank-Feld eintragen
Stringfelder musst du Quoten oder (SQL-)Parameter verwenden
|
Re: MySQL direct - String in Datenbank-Feld eintragen
Wenn es ein String ist dann mußt du es auch SQL-Technisch in Hochkommas vorliegen.
Delphi-Quellcode:
Bau aber deine Statement auf preparet statements um denn sonst hast du SQL-Injection-Probleme wenn der InnerHTML ein ergebnis der Art:
q := ' INSERT INTO test (ip,uhr,aktion) VALUES('''+ip+''',NOW(),0);';
SQL-Code:
liefert.
'; DROP Database...
|
Re: MySQL direct - String in Datenbank-Feld eintragen
Okay bestens. An den Hochkommas hats gelegen.
Vielen Dank für die schnellen Antworten. |
Re: MySQL direct - String in Datenbank-Feld eintragen
ich hätte da nochmal ein kleines problem:
die SQL-Syntax von Like ist ja wie folgt:
SQL-Code:
Wenn ich ip jetzt als globale Variable deklariert hab, wie binde ich das dann (mit Hochkomma etc.) in den delphi code ein ?
SELECT aktion FROM test WHERE ip LIKE 'ip'
Delphi-Quellcode:
Diese Variante klappt nämlich nicht :?
q := ' SELECT aktion FROM test WHERE ip LIKE '''+ip+'''';
|
Re: MySQL direct - String in Datenbank-Feld eintragen
Delphi-Quellcode:
q := ' SELECT aktion FROM test WHERE ip LIKE '+QuotedStr(ip);
|
Re: MySQL direct - String in Datenbank-Feld eintragen
Zitat:
... 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:
Delphi-Quellcode:
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
SQL-Code:
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'
SQL-Code:
Diese Abfrage sucht alle Datensätze in denen irgendwo ein 'e' vorkommt gibt folgende Datensätze zurück:
Select Name from Namen where Name like '%e%'
Peter Andrea
SQL-Code:
Diese Abfrage gibt nur Datensäze zurück die mit einem a aufhören, also:
Select Name from Namen where Name like '%a'
Erna Andrea Den Rest der Sntax nun aber mal selber nachlesen :) Ich hoffe geholfen zu haben |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz