CakePHP は基本的に自動で SQL インジェクション対策をしてくれるんですが (比較演算子インジェクションの問題がありますが)、自力でエスケープしたい場合もたまにあります。
ということで、多次元配列に対応したエスケープメソッドを作りました。
<?php /** * SQLサニタイズして、両端をアポストロフィで囲む * * @param mixed $data サニタイズするデータ * @param bool $close 両端をアポストロフィで囲むかどうか * @param string $name データソース名 * @return mixed サニタイズされたデータ */ function sanitizeSql($data, $close = true, $name = 'default') { if (is_array($data)) { foreach ($data as $idx=>$val) { $data[$idx] = $this->sanitizeSql($val, $close, $name); } return $data; } else { $db = ConnectionManager::getDataSource($name); if ($close) { return $db->value($data); } else { return substr($db->value($data), 1, -1); } } }
各データベースドライバ用のエスケープをしてくれるので、addSlashes() よりも安全だと思います。