SOFTELメモ

Softel Inc.

【php】 SQL server 向けのエスケープ処理は?

問題

もし古いソースや既存のシステムなどで、SQL server向けのエスケープ処理に addslashes関数が使われていて、SQLにシングルクォーテーションを入れるとエラーになったり、バックスラッシュがバックスラッシュでエスケープされて増殖したりするのだが、SQL server向けのエスケープ処理ではないので直したいのだが、大幅に改修は難しいときどうしよう?

答え

これでいいのか?

//単純に、シングルクォーテーションをシングルクォーテーション2個にしてくれればよいだけ
function addslashes_mssql($x) {
    return str_replace("'", "''", $x);
}

配列($_POSTなど)を渡してまとめてエスケープできるようにするなら、

function addslashes_mssql($x) {
    if (is_array($x)) {
        foreach($x as $k => $v) {
            $x[$k] = addslashes_mssql($v);
        }
    } else {
        $x = str_replace("'", "''", $x);
    }
    return $x;
}

関連するメモ

コメント