Quando costruisci la stringa SQL (prepare_update_string credo), così come in entrambi i cicli foreach in cui leghi i dati, esegui un conteggio incrementale e aggiungilo al valore di binding. Quindi ":status" diventa ":status1".
Qualcosa come:
$i = 1;
foreach ($data as $k => $v) {
$this->_sth->bindValue(":{$k.$i}", $v);
$i++;
}
Questo risolverà il problema di eventuali parole chiave riservate.
Risolve anche il problema (che sono sicuro che incontrerai in futuro) per cui è necessario eseguire l'associazione allo stesso segnaposto più di una volta.
per esempio. invece del seguente, che genera un errore a causa di due binding sul segnaposto :status
SELECT * from table WHERE `status` = :status AND `otherfield` = :status
Con un conteggio crescente, questo diventa:
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2
Divertiti.