tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

oracle – neuvozovkovani pri pouziti ‚formatDate‘

před 7 lety

Ekin
Člen | 4
+
0
-

Dibi 2.0 (revision 7c47f57 released on 2012–02–03)
PHP 5.3.8

Ahoj, som v dibi novy, takze neviem, ci nasledujuce je bug, alebo to len cele pouzivam uplne zle :)

v pripojeni k Oracle mam nadefinovany parameter :

'formatDate' => 'd-M-y'

keď sa snažím poskladať query nasledujúcim spôsobom:

dibi::query("SELECT ID FROM D_PROCESSING WHERE proc_date between  %d  and  %d",'02/07/1992','02/07/1992');

tak sa mi vo výsledku query poskladá ako (overované cez dibi::test):

... WHERE proc_date between 07-Feb-92 and 07-Feb-12

problém je ten, že oracle samozrejme očakáva okolo dátumu úvozovky, tj napr:

... WHERE proc_date between '07-Feb-92' and '07-Feb-12'

Momententálne som to obišiel tým, že som si v drivers/oracle.php zmenil riadok 253:

case dibi::DATE:
return $value instanceof DateTime ? "'".$value->format($this->fmtDate)."'" : date($this->fmtDate, $value);

keď tam takto natvrdo pridám úvozovky, tak je to poskladané správne. Čo som pozeral do oracle.php tak sa mi zdá, že by tam úvozovky byť mali, pokiať teda toto chovanie nemá šetrovať nejaká iná časť dibi.

Každopádne sa mi moje riešenie z pochopiteľných dôvodov veľmi nepáči, tak sa chcem spýtať, či neviete o nejakom lepšom. Pre mňa je hlavne dôležité, aby dotaz fungoval správne (ronako) na oracle, mysql, mssql a postgreSQL

před 7 lety

Milo
Nette Core | 1100
+
0
-

Poslal jsem požadavek na pull.

před 7 lety

David Grudl
Nette Core | 6790
+
0
-

Uvozovky by měly být už součástí formatDate. Důvod je ten, že v některých databázích (těch od Microsoftu) se datum do uvozovek nevkládá, jindy je to nechtěné (ukládám datum jako timestamp, tedy číslo).

před 7 lety

Milo
Nette Core | 1100
+
0
-

Není to u těch „některých“ databází jedno, když se escapování provádí na úrovni driveru? Ani uvozovkování čísel Sqlite a Oracle nevadí. Bez automatických uvozovek se člověk musí starat o to, aby escapoval správným znakem.

před 7 lety

Ekin
Člen | 4
+
0
-

David Grudl napsal(a):

Uvozovky by měly být už součástí formatDate. Důvod je ten, že v některých databázích (těch od Microsoftu) se datum do uvozovek nevkládá, jindy je to nechtěné (ukládám datum jako timestamp, tedy číslo).

Pužité ako riešenie súčasného stavu. Dik.

před 7 lety

David Grudl
Nette Core | 6790
+
0
-

Právě že žádný driver escapování neumí, musí to dělat dibi.

před 7 lety

Milo
Nette Core | 1100
+
0
-

Driverem jsem myslel DibiDriver. Většina, včetně DibiMssqlDriver, má v sobě formát natvrdo i s apostrofy. Pouze u Oracle a Sqlite je formát nastavitelný takže je tam potenciální místo pro SQL injection. A těmhle driverům apostrofy kolem čísel timestamp nevadí.

Ale OK, Tvojí filosofii beru, asi jsem jen přehnaně paranoidní :)