Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht (https://www.delphipraxis.net/204645-firedac-mysql-abfrage-mit-k-m-string-funktioniert-nicht.html)

bogdan 15. Jun 2020 10:30

Datenbank: MySQL • Version: Neueste • Zugriff über: FireDac

FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Hallo Zusammen,

Delphi Version: Rad Studio XE8 64Bit
Windows 10 Pro

für DB Abfragen nutze ich ab und zu FireDAC Komponenten.
FDConnection, FDQuery, FDPhysMySQLDriverLink, FDGUIxWaitCursor und DataSource Compo.

Die MySQL Tabellen sind recht einfach aufgebaut, Spalten:
ID, TimeRec, TimeUpd, Active, Wert1 (VarChar), Wert2 (VarChar), usw.

In der Spalte Wert1 steht zb. Yamaha oder Roland oder K&M.

SELECT * FROM Tabelle1, WHERE Wert1 = "Yamaha" -> zeigt richtige Datensätze an
SELECT * FROM Tabelle1, WHERE Wert1 = "K&M" -> zeigt keinen einzigen Datensatz an

Die gleichen SELECT Abfragen habe ich im MySQL Workbench Applikation und über die Zeos Access Komponente ausprobiert. Hier werden mir auch die Datensätze mit "K&M" richtig angezeigt.

Was mache ich falsch bei FireDAC?

haentschman 15. Jun 2020 10:41

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Moin...:P
Zitat:

Was mache ich falsch bei FireDAC?
...keine Parameter zu benutzen! :warn:

Delphi-Quellcode:
Query.SQL.Text := 'SELECT * FROM Tabelle1, WHERE Wert1 = :Blubb'
Query.ParamByName('Blubb').AsString := 'K&M';

bogdan 15. Jun 2020 10:47

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Morgen haentschman,

hab's ausprobiert, es geht :thumb:

vielen Dank

haentschman 15. Jun 2020 10:50

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
...immer mit Parametern arbeiten. :warn:
Wegen: https://de.wikipedia.org/wiki/SQL-Injection
:zwinker:

Uwe Raabe 15. Jun 2020 12:18

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Hier schlägt das Vorverarbeiten von Anweisungstext zu. Auf der DocWiki-Seite ist unter Verarbeitung von Sonderzeichen auch gleich ein Hinweis zu finden, wie man das umgehen kann.

Frickler 15. Jun 2020 16:57

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Zitat:

Zitat von haentschman (Beitrag 1467307)
...immer mit Parametern arbeiten. :warn:
Wegen: https://de.wikipedia.org/wiki/SQL-Injection
:zwinker:

Dumm nur, dass man bei der "IN" Anweisung ("SELECT bla FROM blubb WHERE fasel IN (...)") nicht mit Parametern arbeiten kann....

haentschman 16. Jun 2020 07:52

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Moin...:P
Zitat:

Dumm nur, dass man bei der "IN" Anweisung...
Falsch...:zwinker:

Prinzip:
Delphi-Quellcode:
Qry.SQL.Text := 'select ixAdr from ADR where ixAdr in (:A, :B)';
Qry.ParamByName('A').AsString := '1000';
Qry.ParamByName('B').AsString := '9999';
Qry.Open;
Dazu gehört eine procedure, die den SQL.Text (Bsp: :A, :B), die Anzahl der Parameter (Bsp: 'A') und den ParameterValue (Bsp: '1000') aus der übergebenden Liste aufbaut.
...die muß man selbst programmieren. :zwinker:

Frickler 17. Jun 2020 14:26

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Zitat:

Zitat von haentschman (Beitrag 1467384)
Moin...:P
Dazu gehört eine procedure, die den SQL.Text (Bsp: :A, :B), die Anzahl der Parameter (Bsp: 'A') und den ParameterValue (Bsp: '1000') aus der übergebenden Liste aufbaut.
...die muß man selbst programmieren. :zwinker:

Jetzt wo ich das sehe... erinnere ich mich, das selbst mal so gemacht zu haben. Sogar mit "Intelligenz", d.h. waren es mehr als 20 Parameter, hat das Programm eine temporäre Tabelle erzeugt, die Werte da reingehauen und dann statt "IN" die temporäre Tabelle geJOINt.

himitsu 17. Jun 2020 14:49

AW: FireDAC MySQL Abfrage mit "K&M" String funktioniert nicht
 
Bei einer festen Anzahl im IN mag das noch gehn,
ABER falls man nicht ständig das SQL neu generieren will.... :angle:

ja, ist böse und hatte ich nur für Integer-Listen benutzt,
SQL-Code:
select ixAdr from ADR where ixAdr in (&params)

Delphi-Quellcode:
Qry.ParamByName('params').Value := '1000,9999';


also doch besser wieder die/den "sicheren" Parameter benutzen
SQL-Code:
select ixAdr from ADR where ixAdr in (select unnest(string_to_array(:params, ',')))

Delphi-Quellcode:
Qry.ParamByName('params').AsString := ArrayToString(ParameterListe, ',');


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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