Podczas konstruowania ciągu SQL (chyba prepare_update_string), a także w obu pętlach foreach, w których łączysz dane, uruchom zwiększający się licznik i dołącz go do wartości bind. Tak więc ":status" staje się ":status1".
Coś takiego:
$i = 1;
foreach ($data as $k => $v) {
$this->_sth->bindValue(":{$k.$i}", $v);
$i++;
}
To rozwiąże problem wszelkich zarezerwowanych słów kluczowych.
Rozwiązuje również problem (który z pewnością napotkasz w przyszłości), w którym musisz powiązać z tym samym symbolem zastępczym więcej niż raz.
np. zamiast poniższego, co powoduje wyświetlenie błędu z powodu dwóch wiązań w symbolu zastępczym :status
SELECT * from table WHERE `status` = :status AND `otherfield` = :status
Wraz ze wzrostem liczby otrzymujemy:
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2
Ciesz się.