Oznámení
Maybe bug – DibiDataSource
před 9 lety
- westrem
- Člen | 398
Zdravim,
dnes som v dibi (verzia 1.2) narazil na jednu dost „nepeknu“ vlastnost objektu DibiDataSource, ktora je primarne myslena ako feature, ale moze sa prejavit ako chyba dibi.
Ide o to, ze DataSource urcuje ci mu bolo predane SQL alebo iba nazov tabulky na zaklade vyskytu medzery v premennej $sql. Myslienka pekna a v podstate sa zda byt spravna ale moze dojst k pripadom ked je predane SQL a nie je v nom medzera!
Priklad je uplne trivialny, staci ked clovek dodrziava urcite konvencie a snazi sa pisat citatelny kod a hned je v „pasti“:
SELECT
[name],
[surname]
FROM
[users]
Toto je pekne strukturovana query neobsahujuca ziadne medzery (na odsadenie boli pouzite taby).
Tento vstup vsak DataSource vyhodnotil ako tablename, escapeoval ho (tzn stlpce boli viacnasobne escaped) a samozrejme pri dotaze ako je napriklad getTotalCount() padlo samotne sql a MySQL zahlasilo chybu v syntaxi.
Nastastie mi najdenie chyby trvalo len „polhodiny“ a riesenie je jednoduche, prepisat query tak aby obsahovala medzeru.
Osobne si vsak myslim, ze by bolo lepsie testovat v konstruktore DataSource vyskyt na whitespace vseobecne ako len na medzeru.
Na zaver len tolko, ze radsej som tento radoby problem postol sem na forum, kedze v IssueTrackeri by som ho asi efektivne nevedel kategorizovat.
před 9 lety
- David Grudl
- Nette Core | 6806
fixed
(díky za vyčerpávající popis!)