Jsem rád, že jsi to vyřešil. Tím se však řeší důvod proč bindParam() nefungovalo pro vás. Není to chyba, funguje to tak podle návrhu.
Podle dokumentů :
(důraz můj)
S ohledem na výše uvedené:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...by navázal každý parametr na $rowvalue odkazem která v době provádění dotazu bude vždy 1 (poslední prvek $rowdata )
Způsob, jak to zprovoznit pomocí bindParam() by bylo něco jako:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
90 }
...nebo možná dokonce:
87 foreach($rowdata as $rowname => &$rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...aby každý parametr odkazoval na odpovídající prvek pole .
Alternativou, jak je uvedeno výše, by byla bindValue() který váže parametry hodnotou spíše než odkazem. To znamená, že parametr bude vyhodnocen v okamžiku bindValue() je voláno a ne v okamžiku, kdy je skutečně potřeba (tj. provádění dotazu):
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindValue(':'.$rowname, $rowvalue);
90 }
Samozřejmě druhou alternativou je podávání execute() s řadou parametrů, které umožňují execute() vyřešit část vazby (tedy můj osobní favorit!) .