Вооот! Именно поэтому второй пункт противоречит первому:Одна и та же переменная может использоваться в двух разных контекстах:
Ну вот из твоих же примеров и видно, что область неконкретная. Это как с SQL - "область действия автоэкранирования очень конкретна - SQL". Но SQL неоднороден, и каждый литерал требует своего форматирования.область действия автоэкранирования очень конкретна:
А по первому пункту - да, согласен. Он годится в аргументы того, что
предварительное форматирование на роль автоформатирования не годится в принципе.
Но я хочу вернуться вот к этому пункту
Здесь надо понимать два момента.Наверное, mysql_real_escape_string() ты тоже ставишь ручками и только там, где «нужно».
1. Негодность mysql_real_escape_string() для форматирования. Поэтому сразу откажемся от нее в пользу PDO::quote()
2. Наличие того самого дефолтного форматирования.
И с этими поправками - ты будешь смеяться - да, ставлю!
Когда я пишу код
PHP:
$stm = $pdo->prepare("SELECT name FROM table WHERE id=?");
$stm->execute(array($id));
При этом dbSimple будет сильно нагляднее в этом смысле, поскльку ее строковый плейсхолдер - это как раз просто ? , без модификаторов. Это и есть дефолтный искейпинг.
Сам символ ?, без модификаторов - это и есть "автоформатирование переменной, как строки"
То есть, знак вопроса - это то самое, что ты имел в виду под " mysql_real_escape_string()". А ставлю ручками потому, что других вариантов нету.
Так что, на самом деле всё так и есть

Вопрос - ПОЧЕМУ я так делаю.
И здесь я снова хочу сесть на свою кобылу про безопасность.
В PDO и dbSimple оно работает потому, что даже отформатировав идентификатор(массив, кейворд, что угодно), как строку, ты получишь ошибку, но не получишь инъекцию.
Поэтому дефолтный (АКА авто-) искейпинг работает в них идеально.
А вот с хтмл это уже не прокатывает.
Поэтому я и говорю о том, что дефолтный должен быть каким-то другим.
Потому что я считаю именно безопасность основной причиной автоискейпинга, а не облегчение жизни кодеру, которому лень написать e().