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!) .