bindParam Membutuhkan referensi
Masalahnya disebabkan oleh cara Anda mengikat parameter di loop foreach.
foreach($bindings as $placeholder=>$bound){
echo $placeholder . " - " . $bound."<br/>";
$stmt->bindParam($placeholder, $bound);
}
bindParam
membutuhkan referensi. Ini mengikat variabel, bukan nilai, ke pernyataan. Karena variabel dalam loop foreach direset pada awal setiap iterasi, hanya referensi terakhir ke $bound
dibiarkan utuh, dan Anda akhirnya mengikat semua placeholder Anda padanya.
Itu sebabnya kode Anda berfungsi saat $query['where']
hanya berisi satu entri, tetapi gagal jika berisi lebih dari satu.
Anda dapat memecahkan masalah dengan 2 cara:
Lulus dengan referensi
foreach($bindings as $placeholder => &$bound) { //pass $bound as a reference (&)
$stmt->bindParam($placeholder, $bound); // bind the variable to the statement
}
Lewati berdasarkan nilai
Gunakan bindValue
bukannya bindParam
:
foreach($bindings as $placeholder => $bound) {
$stmt->bindValue($placeholder, $bound); // bind the value to the statement
}