Senang Anda menyelesaikan ini. Namun, ini dimaksudkan untuk mengatasi alasan mengapa bindParam() tidak bekerja untuk Anda. Ini bukan bug, ini bekerja dengan cara ini berdasarkan desain.
Sesuai dengan dokumen :
(penekanan pada saya)
Mempertimbangkan hal di atas, ini:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...akan mengikat setiap parameter ke $rowvalue dengan referensi yang, pada saat eksekusi kueri, akan selalu 1 (elemen terakhir dari $rowdata )
Cara membuatnya bekerja menggunakan bindParam() akan menjadi seperti:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
90 }
...atau, mungkin, bahkan:
87 foreach($rowdata as $rowname => &$rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...sehingga setiap parameter akan mereferensikan elemen larik yang sesuai .
Alternatifnya, seperti dikutip di atas, adalah bindValue() yang mengikat parameter berdasarkan nilai daripada dengan referensi. Artinya parameter akan dievaluasi pada saat bindValue() dipanggil dan bukan pada saat dibutuhkan (yaitu eksekusi kueri):
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindValue(':'.$rowname, $rowvalue);
90 }
Tentu saja, alternatif lainnya adalah memberi makan execute() dengan larik parameter, yang memungkinkan execute() selesaikan bagian yang mengikat (jadi favorit pribadi saya!) .