Nette 2.1-dev: podivné chování queryArgs
- Eda
- Backer | 220
Zdarec.
Je správné chování funkce $db->queryArgs()
takové, že
když dodám v poli s argumenty jeden string, ale v dotazu nikde neuvedu
?
jako zástupný znak, je argument prostě přidán na konec
dotazu?
$this->db->queryArgs("SELECT id FROM car", array('111'));
Vyvolaný dotaz:
SELECT id FROM car '111'
Na konec dotazu se připojí všechny nevyužité proměnné. Když mám např. v dotazu jeden otazník a v poli dva argumenty, druhý se přiřetězí.
- David Matějka
- Moderator | 6445
podle https://api.nette.org/…sor.php.html#67
se to tak chovat asi má.. ale je to celkem divný chování. ted me napadlo..
to bude kvuli insertum a updatum. ze se posila akorat ‚insert into
table‘ a data v parametrech a zformatujou se a pripojej. ale u selectu by to
mozna mohlo byt osetreny, aby se tak nedelo..
Editoval matej21 (15. 3. 2013 0:37)
- Eda
- Backer | 220
On by to možná nebyl problém, kdyby to v Nette 2.0.10 nefungovalo jinak (dle mne očekávatelněji – pokud není zástupný otazník, nic se nepřiřetězí).
Jo, funkce process()
je tak napsaná. V té ale problém není,
ta se neměnila. Měnila se ale právě funkce queryArgs
.
Srovnej:
https://api.nette.org/…ion.php.html#155
https://api.nette.org/…ion.php.html#108
Tento commit:
https://github.com/…145e91ff27ea
Je otázka, jaká vlastně byla motivace pro tento commit…
Osobně mi to přijde jako zbytečný BC break. Někdo by mohl říct, že je
to marginálie, ale může vám kvůli tomu začít padat aplikace. Třeba já
jsem tohoto chování využíval, když jsem chtěl odfiltrovat v administraci
záznamy pro Admina a neadmina – pro neadminy jsem do SQL přidal
where
s nějakým otazníkem, pro Adminy ne. Problém byl ale v
args
, které jsem tam s ID uživatele nechával i pro Adminy. Po
přechodu na Nette 2.1 to ale začalo padat, protože za hotový dotaz se
přiřadilo ještě ID uživatele… :-)
Editoval Eda (15. 3. 2013 1:04)