Nette\Database\Core faulty “Automaticaly detected multi-insert”

dTTb
Member | 30
+
0
-

I have this code:

        $id = 2;
        $ids = [2, 3, 4];

        $query = "INSERT INTO a (a,b)
SELECT a,?, b FROM b
WHERE a.id IN (?)";
        $this->database->query($query, $id, $ids);

and when I try tu run it i get
Automaticaly detected multi-insert, but values aren't array. If you need try to change mode like "?[and|or|set|values|order]". Mode "values" was used.

When i change it to

$query = "INSERT INTO a (a,b)
SELECT a,".$id.", b FROM b
WHERE a.id IN (" . implode(',', $ids) . ")"

it's working. Am I doing something wrong, or is this preprocessor issue?

David Grudl
Nette Core | 8218
+
0
-

Can you try nette/database 3.1-RC ?

m.brecher
Generous Backer | 864
+
+1
-

Já jsem narazil na podobný problém. Z formuláře obdržím sadu řádků které by se měly vložit do databázové tabulky hromadným multi-insertem. Z formuláře mám k dispozici $data ve formátu dvourozměrného ArrayHash, ty ale metoda insert() nezpracuje, a vyhodí chybu Automaticaly detected multi-insert, but values aren't array...... Přetypování (array)$data vytvoří pole obsahující ArrayHash položky a tu insert() také odmítne stejnou chybou. Když se dvourozměrný ArrayHash převede na dvourozměrné pole tak se data bez problému zapíšou.

Naproti tomu jednorozměrný ArrayHash metoda insert() uloží stejně jako jednorozměrné pole.

Vzhedem k tomu, že ArrayHash je standarní formát dat ve formuláři by bylo vhodné, kdyby Nette Database v metodě insert() podporovala pro multi-insert na vstupu jak dvourozměrné pole, tak pole ArrayHash položek, tak i dvourozměrný ArrayHash !!