SELECT `sloupeček` IN array()

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

Ahoj, tento kód funguje:

$db->table('foo')
	->select('foo.id, (foo.id IN (3, 4, 5)) AS bar');

ale tento kód hází chybu:

$db->table('foo')
	->select('foo.id, (foo.id IN ?) AS bar', array(3, 4, 5));
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens.

Jde o bug?

Díky

murdej
Člen | 26
+
0
-

A co třeba?

$db->table('foo')
    ->select('foo.id, (foo.id IN ?) AS bar', array(array(3, 4, 5)));

Jen hádám…

duke
Člen | 650
+
0
-

Pokud se nic nezměnilo, tak otazníky v SELECT části dotazu Nette\Database nepodporuje. Viz půl roku stará issue na githubu.

MichalHaltuf
Bronze Partner | 14
+
0
-

Tak issue na githubu už bylo vyřešeno, bohužel funkce je pouze v masteru a do stabilní verze se zatím nedostala…

Může prosím někdo poradit, jak tuto funkci nahradit?

Když napíšu požadovanou hodnotu přímo do příkazu, tak ji \Nette\Database automaticky escapuje:

$selection = $db->table('books')
    ->select( 'item.*, COUNT(NULLIF(stock.action = \'transfer\', 0)) AS matchesCount' );

=>

SELECT `item`.*, COUNT(NULLIF(`stock`.`action` = '`transfer`', 0)) AS `matchesCount`

což pak samozřejmě nefunguje…

hrach
Člen | 1838
+
0
-

@MichalHaltuf: pouzij uvozovky.