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
 
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
 
nemusis takhle slozite vytvaret to sql, nette database podporuje multi insert: https://github.com/…ocessor.phpt#L328