Oznámení
MySQL funkce v klauzuli WHERE
před 10 lety
- uestla
- Backer | 743
Přeji pěkné odpoledne.
Nevím si rady se zápisem jednoho dotazu – využívám při jeho
skládání fluent interface nad dibi::getConnection()
. V tabulce
mám sloupec datum
jako timestamp a chci z tabulky vytáhnout
pouze řádky s určitým rokem – následující kód mi nefunguje:
$rok = date('Y');
$akce = dibi::getConnection()
->select('*')
->from('akce')
->where('FROM_UNIXTIME(`datum`, %Y)=%s', $rok)
->orderBy('datum')->orderBy('detaily')
->execute()
->fetchAll();
Dibi mi vyhazuje výjimku „SQL translate error“, bohužel nevím, jak dotaz napsat v dibijštině… Mohl by mi prosím někdo poradit?
Předem děkuji.
PHP Version 5.2.9–2
Dibi 1.3-dev (revision 75ede18 released on 2009–11–26)
před 10 lety
- phx
- Člen | 652
Myslim si, ze dibi se snazi interpretovat %Y. Spravny zapis asi bude \%Y nebo %%Y.
Pro ladeni doporucuji metodu test(), ktera vypise vysledny dotaz.
před 10 lety
- uestla
- Backer | 743
phx napsal(a):
Myslim si, ze dibi se snazi interpretovat %Y. Spravny zapis asi bude \%Y nebo %%Y.
Pro ladeni doporucuji metodu test(), ktera vypise vysledny dotaz.
Díky za odpověď – na metodu test()
bych málem
zapoměl.
EDIT:
Tak nakonec nepomohlo ani zdvojení procenta, ani přidání zpětného lomítka (předchozí příspěvek jsem musel upravit – po smazání cache se problém objevil znovu i se zpětným lomítkem).
EDIT 2:
Dibi překladač vypisuje:
SELECT *
FROM `akce`
WHERE FROM_UNIXTIME(`datum`, \**Unknown or invalid modifier %Y**)='ORDER BY' `datum` , `detaily`
Problém tedy bude jak psal phx výše v modifikátoru %Y. Dá se vůbec nějak escapovat?
Editoval uestla (19. 12. 2009 17:45)
před 10 lety
- uestla
- Backer | 743
Šmankote, chyba je v tomhle případě zcela na mojí straně!
Jak „normálně“, tak v dibi je druhým argumentem funkce
FROM_UNIXTIME
řetězec, je ho tedy nutno zapsat mezi
apostrofy/uvozovky! Pak už ho dibi nijak nepřekládá. Zde je tedy již
funkční kód:
$rok = date('Y');
$akce = dibi::getConnection()
->select('*')
->from('akce')
->where('FROM_UNIXTIME(`datum`, "%Y")=%s', $rok)
->orderBy('datum')->orderBy('detaily')
->execute()
->fetchAll();