Chybné předávání parametrů pro zástupné znaky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Blažek
Člen | 36
+
+1
-

Zdravím,
mám problém s SQL dotazem.
Jelikož potřebuju do databáze dostat více objektů, tak zkouším multi insert.

Můj kód je zde:

        $znaky = [];
        for($i = 0; $i < 2; $i++)
        {
            for($j = 0; $j < 9; $j++){
                $znaky[] = $id;
                $znaky[] = self::FIGURE_PUSHER;
                if($i === 0){
                    $znaky[] = 1;
                    $znaky[] = $j;
                    $znaky[] = 2;
                }
                else{
                    $znaky[] = 2;
                    $znaky[] = $j;
                    $znaky[] = 6;
                }
            }
        }

        // insert do databáze
        $this->db->query('INSERT INTO figure
                          (game, type , site, position_x, position_y)
                           VALUES '. $this->createA(count($znaky) / 5), $znaky);

funkce createA():

    private function createA($number){
        // generování zástupných znaků

        $a = "";
        for ($k = 0; $k < $number; $k++){
            if($k !== --$number)
                $a .= '(?,?,?,?,?), ';
            else
                $a .= '(?,?,?,?,?)';
        }

        return $a;
    }

Když zavolám tento kód, tak mi vyskočí Warning –Invalid argument supplied for foreach() –
Podtržený kód

 if ($mode === 'values') { // (key, key, ...) VALUES (value, value, ...)
                   if (array_key_exists(0, $value)) { // multi-insert
                      foreach ($value[0] as $k => $v) { // zde je chyba
                          $kx[] = $this->delimite($k);

Když to ale skipnu, tak dostanu Nette\InvalidArgumentException
– There are more placeholders than passed parameters. –
Jestli byste mi poradili, jak mám předat parametry pro ty zástupné znaky.
Moc děkuji.

Editoval Jan Blažek (18. 6. 2017 18:28)

David Matějka
Moderator | 6445
+
+3
-

nemusis takhle slozite vytvaret to sql, nette database podporuje multi insert: https://github.com/…ocessor.phpt#L328