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