När du konstruerar SQL-strängen (tror jag prepare_update_string), såväl som i båda foreach-slingorna där du binder data, kör en inkrementerande räkning och lägg till den till bindningsvärdet. Så ":status" blir ":status1".
Något i stil med:
$i = 1;
foreach ($data as $k => $v) {
$this->_sth->bindValue(":{$k.$i}", $v);
$i++;
}
Detta kommer att lösa problemet med eventuella reserverade sökord.
Det löser också problemet (som jag är säker på att du kommer att stöta på i framtiden) där du behöver binda till samma platshållare mer än en gång.
t.ex. istället för följande, vilket ger ett fel på grund av två bindningar på platshållaren :status
SELECT * from table WHERE `status` = :status AND `otherfield` = :status
Med en ökande räkning blir detta:
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2
Njut.