Når du konstruerer SQL-strengen (prepare_update_string tror jeg), såvel som i begge de foreach-løkker, hvor du binder data, skal du køre en trinvis optælling og tilføje den til bindeværdien. Så ":status" bliver til ":status1".
Noget som:
$i = 1;
foreach ($data as $k => $v) {
$this->_sth->bindValue(":{$k.$i}", $v);
$i++;
}
Dette vil løse problemet med reserverede søgeord.
Det løser også problemet (som jeg er sikker på du vil støde på i fremtiden), hvor du skal binde til den samme pladsholder mere end én gang.
for eksempel. i stedet for følgende, som kaster en fejl på grund af to bindinger på :status pladsholderen
SELECT * from table WHERE `status` = :status AND `otherfield` = :status
Med et stigende antal bliver dette:
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2
God fornøjelse.