CakePHPのupdateAllでDATE型、DATETIME型が更新されない

   

CakePHPのupdateAllでDATE型、DATETIME型が更新されない

upateAllメソッドを使って、条件に当てはまるレコードを一気にアップデートしたい場合があります。updateAllメソッドを使うと便利なのですが、日付の更新をしようとすると【0000-00-00】みたいになってしまって、正しく更新できません。

以下のように、シングルコーテーションで囲ってあげると正しく更新されるようになります。

$targetDate = date('Y-m-d');

$updateInfo = [
	'target_date' => "'{$targetDate}'",
];

$condition = [
	// ここに条件
];

$this->updateAll($updateInfo, $condition);

 

updateAllあupdate文を生成すると、文字列などに対して自動でシングルコーテーションをつけてくれないために、正しく更新されません。手動でシングルコーテーションをつけると、正しく更新されます。

手動でシングルコーテーションをつけるということは、SQLインジェクション等のセキュリティ的に考慮しないといけないということですね。気をつけましょう。

megane

megane

エンジニア歴13年位です。PHPとかMysqlを使ってWebシステムを構築します。 Javaも書きます。 CakePHPも使います。 サーバのチューニングもごりごりやります。 あと、お肉と自動車が好きです。Twitterとか申請どうぞ。

 - CakePHP