Oznámení
oracle – neuvozovkovani pri pouziti ‚formatDate‘
před 8 lety
- Ekin
- Člen | 4
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 8 lety
- David Grudl
- Nette Core | 6806
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 8 lety
- Milo
- Nette Core | 1119
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 8 lety
- Ekin
- Člen | 4
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 8 lety
- David Grudl
- Nette Core | 6806
Právě že žádný driver escapování neumí, musí to dělat dibi.
před 8 lety
- Milo
- Nette Core | 1119
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í :)