読者です 読者をやめる 読者になる 読者になる

ウェブサービスを作っています。

sanitizeSql

CakePHP PHP

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() よりも安全だと思います。