Nette\Database\Core faulty “Automaticaly detected multi-insert”
- dTTb
- Member | 30
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?
- m.brecher
- Generous Backer | 838
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 !!