LoginSignup
10
12

More than 5 years have passed since last update.

CakePHPのupdateAll()でエラーが出るときはここが怪しい!

Posted at

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() を使って手動でクォートしてください。」って書いてあるんですけどね。見落としがちなので。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12