Защищенность PDO от инъекций строится на использованании не динамически создаваемых запросов, но запросов с параметрами. Любой момент изменения запроса в коде под какие-то (часто необдуманные) нужды приводит к возможности инъекции.
пример вам уже привели, повторю его:
$qry = 'select * from users where user_id='".$usrname.'" and passwd='".md5($passwd.'$salt).'"';
запрос подвержет инъекции: достаточно подсунуть имя с двойной кавычкой и далее через точкузапятую свой запрос. Остаток с паролем комментируется символами:
$usrname = '"; update users set passwd="12345" where id="admin"; -- ';
приведет фактически к такому запросу
select * from users where id=""; update users set passwd="12345" where id="admin"; -- passwd=''
совсем другое дело PDO. Он не допускает мультикомандные запросу как факт (то есть после первого select обработка не пойдет). А во вторых указанные инъекции просто запицется в параметры запроса, что будет обработанно корректно.