![]() |
Datenbank: MySql • Version: 5.1.33-community • Zugriff über: DirectMySQL
"Datei C:\test.txt" -> "Datei C:est.txt&qu
Servus,
möchte gerne diesen Datensatz "Datei C:\test.txt" in die Datenbank abspeichern. Raus kommt "Datei C: est.txt". Gibt es da eine extra einstellung das er \t nicht umsetzt? Mfg |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Hast Du den String auch escaped? \t ist in C und ähnlichen Dialekten das Zeichen für einen Tabulator.
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
MySQL sollte eine Funktion namens mysql_real_escape_string oder so anbieten - Bevor du Texte in die Datenbank schreibt, solltest du sie grundsätzlich durch diese Funktion schicken.
Die Funktion escapet (schreibt man das so?) den Text so, dass nachher das in der Datenbank steht, was auch in dem Text stand. addslashes ist dafür nicht die richtige Wahl, außerdem wird diese Funktion in Delphi wahrscheinlich schwer zu finden sein ... |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
IIRC ist das aber keine MySQL- sondern eine PHP-Funktion.
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
wuste ich nicht, thx
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
habe gerade gesehen, die SQL Klasse die ich verwende, bietet sowas nicht an.
Und nu? Selber programmieren? |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Du verwendest doch MySQLDirect, oder hab ich das falsch verstanden? Da gibt es die Funktion mysql_real_escape_string, hab gerade nachgeschaut.
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Hmmm....Das ist meine Abfrage.
Delphi-Quellcode:
Und ein mysql_real_escape_string habe ich nicht gefunden.....
function TMyDb.SQLQuery(sQuery : String): String;
var bex: boolean; begin result := '-D1'; if fIsOnline then begin result := '0'; if assigned(FResult) then begin if FMysql.Status<>MYSQL_STATUS_READY then result := '1'; FreeAndNil(FResult); end; FResult := FMysql.query(sQuery, true, bex); if assigned(FResult) then result := '0' else if ex then result := '0' else result := FMysql.LastError; end; end; |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Nur um sicherzugehen: Du verwendest
![]() |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Ich denke, er benutzt diese hier:
![]() In diesem Fall gibt es eine Funktion escapeStr ;) |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
nein die habe ich nicht. Ich verwende die von Cristian Nicola.
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Zitat:
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Nachdem das Stichwort "escape" bereits in #2 gefallen ist, hätte man auch auf die Idee kommen können, in der Unit mal nach diesem Wörtchen zu suchen :zwinker:
|
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Zitat:
Wollte mal versuchen ob ich den ganzen String umwandeln kann. Das geht leider nicht :( dann heist es jetzt suchen wo ich überall Daten in die DB speicher....
Delphi-Quellcode:
sQuery := EscapeStr(sQuery);
FResult := FMysql.query(sQuery, true, ex); |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Du musst nur den String escapen, nicht den gesamten Query.
Beispiel:
Delphi-Quellcode:
Edit: Was du aber noch überlegen könntest, wäre sowas wie Zeos für deine Queries zu nehmen (Stichwort "parametrisierte Queries"), dann musst Du noch den String dem gewünschten Feld zuweisen und Zeos (oder auch eine andere Zugriffskomponente) würde den Rest übernehmen.
sQuery := 'INSERT INTO WhatEever VALUES (100, ' + EscapeStr(DeinString) + ', 500)';
Viele Grüße |
Re: "Datei C:\test.txt" -> "Datei C:est.tx
Wollte mir nur was arbeit ersparen und habe es auf die ganze Query gesetzt.
Naja dann muss ich halt nur die werte ändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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