「PDO::quote()」の編集履歴(バックアップ)一覧に戻る

PDO::quote() - (2015/11/23 (月) 20:16:03) のソース

phpの学習に使っている手元にある本にmysql_real_escape_stringという関数が使用されていました。~
しかしこの関数が意味するところを調べてみると、もう非推奨となっていました。~
そこでPDO::quoteに出会い、今回はそれを勉強してみました。~
(名著なのですが2008年のものなので仕方ないみたいです・・・)~
~
*SQLインジェクション
セキュリティの不備を利用して、不正なSQL文を実行させることによって、データベースシステムを不正に操作する攻撃手法のことをSQLインジェクションと言います。~
このSQLインジェクションに対策を打つべく外部から文字列を入力してデータベースを操作する場合にはサニタイジング処理を行わなければいけません。~
~
*サニタイジング処理
これはエスケープ処理とも言われ、特殊文字をエスケープしてくれます。~
~
*PDO::quote
PDO::quote()ではエスケープ処理をしてくれます。~
以下のコードでは、もうすでにデータベースにアクセスしているものとします。
**コード
 <?php
 //データベースにアクセスして選択する
 
 $user = '****';
 $pass = '*****';
 
 try {
    $dbh = new PDO('mysql:host=localhost;dbname=*****', $user, $pass);
 
 if($dbh){
 	echo "データベースへの接続に成功しました。";
 }else{
 	echo "データベースへの接続に失敗しました。";
 }
 } catch (PDOException $e) {
 
    print "エラー!: " . $e->getMessage() . "<br/>";
     die();
 }
 ?>
 <?php//エスケープ処理
 $string = 'Nice';
 print "Unquoted string: $string\n";
 print "Quoted string: " . $dbh->quote($string) . "\n";
 ?> 
**実行
 Unquoted string: Nice
 Quoted string: 'Nice'

となります。~ 
このようにシングルクオートがエスケープされます。~