Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Import SQL příkazů

Mám v php proměnné několik SQL příkazů. Jsou oddělené středníkem (šéf o jiném oddělovači nechce ani slyšet). A potřebuju, aby se postupně provedly, ovšem nikoli pomocí multiquery, to náš framework neumí (a jiný mám zakázáno použít), ale jako jednotlivé příkazy. Když to rozdělím na jednotlivé příkazy pomocí Explode, tak je problém, když se třeba v updatu vyskytne středník v textu. Šéf radí použít preg_match_all, nemáte tip, jak by ty reg. výrazy měly vypadat, aby fungovaly pro všechny možné SQL příkazy?

Dík

Předmět Autor Datum
Nevím, jestli to řešit regulárem. Středníky po lichém počtu uvozovek chceš ignorovat, podle středník…
Titulkář 03.05.2012 09:12
Titulkář
ne nejednoduší je regulerní výraz - neb to je správné a je to jeden příkaz. Akorád by mi zajimalo j…
AZOR 03.05.2012 09:15
AZOR
ci mas nejakou escape sekvenci pro znak ; protoze jinak je to velmi slozita uloha na urovni perseru…
Titulkář 03.05.2012 09:35
Titulkář
iroine? to jsem mozna trosku prehnal, nevim jak v mysql ale reg. vyraz sudy pocet oddelovacu stringu…
AZOR 03.05.2012 10:42
AZOR
jsem teda jen blbej ajťák, ale za "správným" oddělovacím středníkem musí IMHO následovat nějaké "úvo…
touchwood 03.05.2012 12:51
touchwood
Přesně tak bych to dělal taky. A to jsem jenom blbej programátor...:-)
MaSo 03.05.2012 12:54
MaSo
je tam jen takové menší riziko malformed SQL query.. [exploits_of_a_mom.png] edit: což by ale při…
touchwood 03.05.2012 12:56
touchwood
prosimte odkud to je? Rád bych to uvedl na svuj blog a chtel bych tam i originalni zdroj (jsem perve…
AZOR 03.05.2012 13:17
AZOR
:-D tolik jich zase neni ? ALTER, CREATE, DROP, INSERT, SELECT, UPDATE, INSERT ALL,ANYLYZE,COMPUTE,…
AZOR 03.05.2012 13:02
AZOR
:-D navic nemusi nasledovat - muze tam byt netisknutelny znak, kterémy tam nevadi.
AZOR 03.05.2012 13:04
AZOR
furt je to ale jen o konečném výčtu, který se dá cyklem zpracovat.
touchwood 03.05.2012 14:55
touchwood
:-p kazda kombinace pismenek omezena velikosti media je konečná, tedy výčet a nevidim duvod proc vy…
AZOR 03.05.2012 15:07
AZOR
Vymenit sefa a potom dat na vstup oddelene prikazy.
MM.. 03.05.2012 13:21
MM..
to je ale klasická Utopie ;-)
touchwood 03.05.2012 14:57
touchwood
8-) ale precizni a spravne reseni
AZOR 03.05.2012 15:08
AZOR
to jistě, ale znáš to, teorie šedivá, zelený strom života.. ;-) aneb věděl to už von Goethe poslední
touchwood 03.05.2012 15:49
touchwood

Nevím, jestli to řešit regulárem. Středníky po lichém počtu uvozovek chceš ignorovat, podle středníků po sudém počtu chceš explodovat. Nejjednodušší mi připadá projít to zleva znak po znaku, počítat uvozovky a apostrofy. "Funkční" středníky nahrazovat něčím, podle čeho to pak explodneš.
Je to "ruční práce" a nebude to nejrychlejší, ale nic lepšího mě nenapadá.

ne nejednoduší je regulerní výraz - neb to je správné a je to jeden příkaz.

Akorád by mi zajimalo jestli mas vy sql uzavreny uvozovkach, ci mas nejakou escape sekvenci pro znak ; protoze jinak je to velmi slozita uloha na urovni perseru sql

iroine? to jsem mozna trosku prehnal, nevim jak v mysql ale reg. vyraz sudy pocet oddelovacu stringu (tady uvozovky, tam apostrovy) by zdaleka nestacil, aby se podle toho dali regulerne splitovat prikazy

jsem teda jen blbej ajťák, ale za "správným" oddělovacím středníkem musí IMHO následovat nějaké "úvodní" klíčové slovo z dalšího SQL dotazu, a těch IMHO zase tolik není (SELECT, INSERT, CREATE, DROP, UPDATE, TRUNCATE,...).

Než se pinožit s parserem, tak bych šel cestou nejmenšího odporu.. ;-)

je tam jen takové menší riziko malformed SQL query..

[exploits_of_a_mom.png]

edit: což by ale při úvodní znalosti počtu itemů ve stringu před samotným itemizováním mělo jít minimálně ošetřit a případně nouzově zastavit.

:-D tolik jich zase neni ? ALTER, CREATE, DROP, INSERT, SELECT, UPDATE, INSERT ALL,ANYLYZE,COMPUTE, STATISTICS, SAVEPOINT, ROLLBACK,COMMIT, AUDIT, CALL, COMMENT, EXEC, ASSOCIATE,GRANT,LOCK, REVOKE,NOAUDIT,PURGE,RENAME, MERGE,EXPLAIN, FLASHBACK,SET...a BEGIN, a DECLARE..

Nehledě na to, ze to porad neni split se 100% uspesnosti (nebo nektere stringy to taky nezparsuje), to bych dal radeji prednost tomu regulernimu vyrazu s tim sudym poctem uvozovek.

Ackoliv rozumne by bylo nemrdat prikazy do jednoho (nebo s nejakym unikatnim oddelovatkem) a dat kurna do tabulky, kde bude prikaz na radku, jak to ma byt.

:-p kazda kombinace pismenek omezena velikosti media je konečná, tedy výčet

a nevidim duvod proc vycet, ktery porad nepodchyti vsechny pripady, to radeji split podle toho jednodussiho regulerniho vyrazu s pocetem sudych uvozovek. A kvuli bilem znakum to musi byt regulerni vyraz chca ci necha

Zpět do poradny Odpovědět na původní otázku Nahoru