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

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