PHP & PearのDB.php でプレースホルダを使う。
書籍をちゃんと読めばよかったんだけど、
ちょっと前にはまったことをメモしておく。
phpでDBを扱うときにプレースホルダを使うわけですが、
プレースホルダを利用した時点で、エスケープ処理がされるわけなんです。
が、それを勘違いしまして、
mysql_real_escape_stringしたわけですよ。
そしたら、やっぱり↓みたいのがでましたね。
Warning: mysql_real_escape_string(): Access denied for user: ‘aaaa@localhost’ (Using password: NO) in aaa.php on line 384
Warning: mysql_real_escape_string(): A link to the server could not be established in aaa.php on line 384
まあ、エラーの内容はちょっと変ることもあるだろうけど、
僕がしくじった時はこんなんがでてました。
ようするに、2重でエスケープ処理してまったって話ですね。
ちなみにプレースホルダってのは、↓みたいなのですね。
$options = array(“test”, “hogemoge.com”, “bbb@hogemoge.com”);
$sql = “select colm from tablename where name = ? AND domain = ? AND email = ? “;
$aaa = $db->query($sql, $options);
$sqlに代入してるSQL文に『?』が3つあるわけですが、
$options配列に入っている内容も3つあります。
各々エスケープ処理されて、『?』のところに充当されるわけですね。
というわけで、phpではプレースホルダすれば、エスケープ処理いらないよというお話でした。