(MySQL+PHP) sprintf()の%は%でエスケープできる

sprintf-%-escape

sprintf()の%は%でエスケープできる

 

sprintf()式で使う、「%」は、「%」を使うことでエスケープできる。

具体的な例を書くと、

$comment = 'php';

$sql = sprintf('SELECT * FROM comment LIKE "%%%S%%"', $comment);

 

とすると、結果的に 「%php%」と言う文字列に変換される。
具体的な処理の流れを見ていこう。

 

エスケープの流れ

 

「%s」は変数の値でphpに変換される。
なので「%%php%%」になる。

残った「%」のうち、後ろの%は、それぞれ手前の 「%」でエスケープされるので、結果としてただの「%」と言う「文字列」になる。

%→「%」php %→「%」

結果「%php%」が残る

 

これがSQLのLIKE文に残ることで、結果として、

$sql = 'SELECT * FROM comment LIKE %php%';

 

と言うSQL文の完成。

%はワイルドカードなので、「php」と言う文字列を含むレコードを全て取ってくる、 と言うSQL文の出来上がり。

ちなみにこれは、検索フォームなどで入力された文字列からDBのレコードを引っ張ってくるときなんかに便利。

 

注意点としては、でユーザの入力情報を受け取って変換するときは、必ず「サニタイズ」すること

悪意ある入力によってSQLインジェクションされてしまうので。

 

まとめ

 

sprintf()式で使う、「%」は、「%」を使うことでエスケープできる。

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。