Chybné předávání parametrů pro zástupné znaky
- 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