mam taki kod:
$tab = array(':tytul' => $nazwa, ':autor' => $autor,':cena' => $cena, ':typ' => $typ,':opis' => $opis, ':rodzaj' => $rodzaj, ':stanowiskwgarazu' => $garaz, ':katnachyleniadachu' => $kat, ':podpiwniczenie' => $piwnica, ':poddasze' => $poddasze, ':kominek' => $kominek, ':szerokoscdzialki' => $szerokosc, ':dlugoscdzialki' => $dlugosc, ':powuzytkowa' => $pow_uzytk, ':powzabudowy' => $pow_zabud, ':powdachu' => $pow_dach, ':typkotla' => $typ_ogrzewania, ':idpracowni' => $id_pracowni , ':idkat' => $id_kat); $stm = $this->db->prepare("INSERT INTO projekty_projekt (tytul, autor, cena, typ, opis, rodzaj, stanowisk_w_garazu, kat_nachylenia_dachu, podpiwniczenie, poddasze, kominek, szerokosc_dzialki, dlugosc_dzialki, pow_uzytkowa, pow_zabudowy, pow_dachu, typ_kotla, projekty_pracownie_id_pracowni, projekty_kategorie_id_kategorii ) VALUES (:tytul, :autor, :cena, :typ, :opis, :rodzaj, :stanowiskwgarazu, :katnachyleniadachu, :podpiwniczenie, :poddasze, :kominek, :szerokoscdzialki, :dlugoscdzialki, :powuzytkowa, :powzabudowy, :powdachu, :typkotla, :idpracowni, :idkat )"); foreach($tab as $k => $v){ $param = PDO::PARAM_INT; $param = PDO::PARAM_BOOL; $param = PDO::PARAM_NULL; $param = PDO::PARAM_STR; else $param = ''; if($param) $stm->bindValue($k, $v, $param); } $il = $stm->execute();
Problem polega na tym ze jak robie dodawanie do bazy to pojawia sie taki blad:
Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /home/.../admin.class.php on line 297
jednak gdy robie bindowanie z reki bez petli foreach:
$stm->bindValue(':tytul', $nazwa); $stm->bindValue(':autor', $autor); $stm->bindValue(':cena', $cena); $stm->bindValue(':typ', $typ); $stm->bindValue(':opis', $opis); $stm->bindValue(':rodzaj', $rodzaj); $stm->bindValue(':stanowiskwgarazu', $garaz); $stm->bindValue(':katnachyleniadachu', $kat); $stm->bindValue(':podpiwniczenie', $piwinica); $stm->bindValue(':poddasze', $poddasze); $stm->bindValue(':kominek', $kominek); $stm->bindValue(':szerokoscdzialki', $szerokosc); $stm->bindValue(':dlugoscdzialki', $dlugosc); $stm->bindValue(':powuzytkowa', $pow_uzytk); $stm->bindValue(':powzabudowy', $pow_zabud); $stm->bindValue(':powdachu', $pow_dach); $stm->bindValue(':typkotla', $typ_ogrzewania); $stm->bindValue(':idpracowni', $id_pracowni); $stm->bindValue(':idkat', $id_kat);
to zamiast 400 roznych rekordow pojawia mi sie tylko w bazie 1, pierwszy. Caly kod powinien sie wykonac okolo 400 razy bo tyle rekordow pobralem z xml. Tablice stworzona mam dobrze bo var_dump ja ladnie wyswietlil. Problem twki w samym dodawaniu. Dlaczego dodaje mi jeden rekord i jak z powyzszego zapytania pozbyc sie tego bledu?