CakePHPのupdateAll()を使用した際に発生したエラーで
若干ハマったので残します。
CakePHPのupdateAll()は自動でクォート処理、サニタイズ処理を
してくれません!!
…言いたいのはそれだけです。
それだけでハマッてしまったのです。
対処法は以下の通り
SampleModel.php
$test = 'value';
$data = "'" . Sanitize::escape($test) . "'";
$this->updateAll(
array('SampleModel.shop_id' => $data),
array('SampleModel.id' => $id)
);
updateAllで書き換えるデータは
- 自前でクォートを付ける!
- サニタイズを行う!
この2点がポイントです。
Column not found: 1054 Unknown column 'value' in 'field list'
これで上記エラーが出ていた私のコードもすっきり解消しました。
##詳しい解説
http://book.cakephp.org/2.0/ja/models/saving-your-data.html
↑公式リファレンス
ちゃんと「リテラルは Sanitize::escape() を使って手動でクォートしてください。」って書いてあるんですけどね。見落としがちなので。