gooID利用規約 改定のお知らせ

例えば手続き型でしたら、値をデータベースに追加するとき

$sql = sprintf( 'INSERT INTO member SET id=%d, message="%s" ', mysql_real_escape_string($id), mysql_real_escape_string($message)
);
mysql_query($sql) or die(mysql_error());


など「mysql_real_escape_string」を使って多少なりともセキュリティーをかけると思うのですが、PDOですと下記に書かれている以外に見たことないのですが、「mysql_real_escape_string」などはやらなくても大丈夫ということなのでしょうか?


PDOの場合

$sql = 'INSERT INTO member SET id=?, message=?';
$stmt = $db->prepare($sql);
$stmt->execute(array($id, $message));

色々調べてみたのですがいまいち分からないためよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

その書き方はバインド機構を使っていますので、エスケープ処理をしなくても大丈夫です。



?の中にPDO(PHP)が適切に処理をして格納してくれるので、作成者は意識しないで安全になります。

?でなく、変数格納もできますので、柔軟な拡張ができます。
:ID
のような形です。

?だとその順番に値を入れないといけませんが、変数だと順番は関係なく、連想配列のように、値を格納することができます。
PDOのbindValueとかを調べてみてください。
    • good
    • 0
この回答へのお礼

なるほど、そういうことでしたか!
ありがとうございました!!

お礼日時:2011/07/24 23:03

こちらが参考になるかと



参考URL:http://php.net/manual/ja/pdo.prepared-statements …
    • good
    • 0
この回答へのお礼

URL教えてもらってありがとうございます!
勉強してみます!!

お礼日時:2011/07/24 23:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング