SELECT * FROM user_info WHERE name = '$username' AND password = '$userpass';
のように入力を受け付けたときに、
SELECT * FROM user_info WHERE name = 'user1' AND password = '' OR 'A' = 'A';
のようなSQL文を生成し、不正なログインなどをするSQLインジェクションに対し、このケースの場合
$sql = "SELECT * FROM user_info WHERE name= :username AND password= :pass"; $stmt = $dbh->prepare($sql); $stmt->bindValue(':username',$username,PDO::PARAM_STR); $stmt->bindValue(':pass',$password,PDO::PARAM_STR); $stmt->execute();
とプレースホルダを用いて対策できる。bindValue()の返り値がboolなのに最初混乱した。注意が必要。