Khi bạn xây dựng chuỗi SQL (tôi nghĩ là chuẩn bị_lập_string), cũng như trong cả hai vòng lặp foreach nơi bạn liên kết dữ liệu, hãy chạy một số lượng tăng dần và thêm nó vào giá trị ràng buộc. Vì vậy, ":status" trở thành ":status1".
Một cái gì đó như:
$i = 1;
foreach ($data as $k => $v) {
$this->_sth->bindValue(":{$k.$i}", $v);
$i++;
}
Điều này sẽ giải quyết vấn đề của bất kỳ từ khóa dành riêng nào.
Nó cũng giải quyết vấn đề (mà tôi chắc rằng bạn sẽ gặp phải trong tương lai) khi bạn cần liên kết với cùng một trình giữ chỗ nhiều lần.
ví dụ. thay vì phần sau, điều này gây ra lỗi do hai liên kết trên:status placeholder
SELECT * from table WHERE `status` = :status AND `otherfield` = :status
Với số lượng tăng dần, giá trị này trở thành:
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2
Hãy tận hưởng.