Cieszę się, że to rozwiązałeś. Ma to jednak na celu rozwianie powodu dlaczego bindParam()
nie pracował dla ciebie. To nie jest błąd, działa w ten sposób zgodnie z projektem.
Zgodnie z dokumentacją :
(podkreślenie moje)
Biorąc pod uwagę powyższe, to:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...powiąże każdy parametr z $rowvalue
przez odniesienie która w momencie wykonania zapytania zawsze będzie wynosić 1
(ostatni element $rowdata
)
Sposób, aby to działało za pomocą bindParam()
byłoby coś w stylu:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
90 }
...a może nawet:
87 foreach($rowdata as $rowname => &$rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...aby każdy parametr odwoływał się do odpowiedniej tablicy elementu .
Alternatywą, jak zacytowałem powyżej, byłaby bindValue()
który wiąże parametry według wartości a nie przez odniesienie. Oznacza to, że parametr będzie oceniany w czasie bindValue()
jest wywoływana, a nie w momencie, w którym jest to faktycznie potrzebne (tj. wykonanie zapytania):
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindValue(':'.$rowname, $rowvalue);
90 }
Oczywiście inną alternatywą jest karmienie execute()
z tablicą parametrów, która pozwala execute()
rozwiązać część wiążącą (a więc mój osobisty faworyt!) .