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
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
ci mas nejakou escape sekvenci pro znak ; protoze jinak je to velmi slozita uloha na urovni perseru sql
aha.
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..
Přesně tak bych to dělal taky. A to jsem jenom blbej programátor...
je tam jen takové menší riziko malformed SQL query..
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.
prosimte odkud to je? Rád bych to uvedl na svuj blog a chtel bych tam i originalni zdroj (jsem perverzák, ne buran ) diky
a uz vidim: xkcd.com
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.
navic nemusi nasledovat - muze tam byt netisknutelny znak, kterémy tam nevadi.
furt je to ale jen o konečném výčtu, který se dá cyklem zpracovat.
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
Vymenit sefa a potom dat na vstup oddelene prikazy.
to je ale klasická Utopie
ale precizni a spravne reseni
to jistě, ale znáš to, teorie šedivá, zelený strom života.. aneb věděl to už von Goethe