tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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!)