AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi xe2 und #39 =ZWEI Hochkommas
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi xe2 und #39 =ZWEI Hochkommas

Ein Thema von Ykcim · begonnen am 17. Sep 2012 · letzter Beitrag vom 8. Okt 2012
Antwort Antwort
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 8. Okt 2012, 08:03
@Sir Rufo

Hmm warum nutzt die Functionen keiner? Thread-Start + alle anderen Antworten -> es wissen halt zu wenige, daß es diese Funktionen gibt, oder viel mehr hat sich noch keiner damit auseinander gesetzt, wie so eine Query gesplittet wird.

Alle SQL RDBMS haben da das gleich Verhalten. Sobald der Char, welche String-Anfang/Ende signalisiert, oder der Escape-Char sich in diesem String befindet, müssen dies Chars escaped werden.

Simples Beispiel:

insert into Tabelle1 values ('Foo'bar', 'Foo'bar');

MySQL ließt nun jeden Char und erstllt eine Liste von Tokens. Quasi Token.Value/Token.Type.

die ersten Tokens bis zur Klammer übergehe ich mal. Dann folgt beim jetzigen string:

Token.Value = "Foo"
Token.Type = Quoted

Token.Value = "bar"
Token.Type = word -> da ohne Anführungszeichen

Token.Value = ", "
Token.Type = Quoted

Token.Value = "Foo"
Token.Type = word -> da ohne Anführungszeichen

Token.Value = "bar"
Token.Type = Quoted

Also ein riesen Schlamassel, da ALLE SQL Provider davon augehen: Was zwichen den Quotes steht ist DER String. um MySQL zu zwingen über die Half-Quote zu lesen, muß diese Escaped werden. Für die meisten CharSets wird hier der '\' hergenommen. Für Big5 oder GB1080 zum Beispiel ist das unmöglich, da bei den EUC kodierten charsets meisten '\' das zweite Byte darstellt.

Also zum String zurück:

insert into Tabelle1 values ('Foo\'bar', 'Foo\'bar');
...
Token.Value = "Foo'bar"
Token.Type = Quoted

Token.Value = ","
Token.Type = Symbol

Token.Value = " "
Token.Type = WhiteSpace

Token.Value = "Foo'bar"
Token.Type = Quoted

Ihr Seht: MySQL entfernt die Escape Chars auch wieder von selber.

Wenn ihr Abfragen selber strickt, deren Inhalt unbekannt ist, verwendet entweder die Escape-Functionen oder Parameter, welche genau das automatisch machen.

Gruß Michael

Geändert von EgonHugeist ( 8. Okt 2012 um 08:06 Uhr)
  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 08:37 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