Nette 2.1-dev: podivné chování queryArgs

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Eda
Backer | 220
+
0
-

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
+
0
-

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
+
0
-

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)