SQL文字列(prepare_update_stringだと思います)を作成するとき、およびデータをバインドする両方のforeachループで、増分カウントを実行してバインド値に追加します。したがって、「:status」は「:status1」になります。
次のようなもの:
$i = 1;
foreach ($data as $k => $v) {
$this->_sth->bindValue(":{$k.$i}", $v);
$i++;
}
これにより、予約されたキーワードの問題が解決されます。
また、同じプレースホルダーに複数回バインドする必要があるという問題(将来発生すると確信しています)も解決します。
例えば次の代わりに、:statusプレースホルダーの2つのバインドが原因でエラーがスローされます
SELECT * from table WHERE `status` = :status AND `otherfield` = :status
カウントを増やすと、これは次のようになります。
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2
お楽しみください。