Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PDO nhiều trình giữ chỗ được đặt tên không truy xuất dữ liệu

bindParam Yêu cầu tham chiếu

Vấn đề là do cách bạn liên kết các tham số trong vòng lặp foreach.

foreach($bindings as $placeholder=>$bound){
    echo $placeholder . " - " . $bound."<br/>";
    $stmt->bindParam($placeholder, $bound);
}

bindParam yêu cầu một tài liệu tham khảo. Nó liên kết biến, không phải giá trị, với câu lệnh. Vì biến trong vòng lặp foreach được đặt lại khi bắt đầu mỗi lần lặp nên chỉ tham chiếu cuối cùng đến $bound được giữ nguyên và bạn kết thúc việc ràng buộc tất cả các trình giữ chỗ của mình với nó.

Đó là lý do tại sao mã của bạn hoạt động khi $query['where'] chỉ chứa một mục nhập, nhưng không thành công khi có nhiều mục nhập.

Bạn có thể giải quyết vấn đề theo 2 cách:

Chuyển qua tài liệu tham khảo

foreach($bindings as $placeholder => &$bound) {  //pass $bound as a reference (&)
    $stmt->bindParam($placeholder, $bound);     // bind the variable to the statement
}

Chuyển theo giá trị

Sử dụng bindValue thay vì 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. Câu lệnh MySQL TABLE

  2. MySQL- Tại sao LAST_INSERT_ID () không hoạt động với tôi?

  3. Sử dụng đối chiếu nào để `ş` và` s` được coi là các giá trị duy nhất?

  4. Không bao giờ xóa các mục nhập? Ý tưởng tốt? Bình thường?

  5. Cập nhật cơ sở dữ liệu SQL với giá trị hộp kiểm