Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PDO beberapa tempat penampung bernama tidak mengambil data

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
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fitur Tersembunyi MySQL

  2. mysql - setelah memasukkan abaikan dapatkan kunci utama

  3. Bagaimana menghubungkan ke database MySQL

  4. Bagaimana cara memesan kueri MySQL dengan kolom tertentu?

  5. Nama tabel atau panjang nama kolom memengaruhi kinerja?