Подготовленные операторы подготовлены, потому что вы создаете маркеры для PDO для вставки значений, и эти значения могут быть названы (например,: accountId,: url), где PDO найдет названный маркер, или позиционный (в частности, знак вопроса ( ?)) где PDO будет вставлять значения в том порядке, в котором были размещены маркеры.
например:
$query = "SELECT user_id FROM users WHERE username = ?";
$statement = $pdo->prepare($query);
$statement->execute(array("John Smith"));
Обратите внимание на явное отсутствие именованных параметров (в частности, использование? Вместо: username), и вместо этого используется позиционный стиль. Использовать те или иные параметры сугубо лично, хотя я считаю, что использование именованных параметров более понятно при отладке.
В любом случае. Это означает, что вам не нужно заключать в кавычки, если вы используете подготовленные операторы, и вам не нужно беспокоиться о внедрении SQL при использовании подготовленных операторов.
Теперь, на самом деле, PDO просит драйвер базы данных (MySQL, PostgreSQL, MS SQL, Oracle и т. Д.) Подготовить оператор, но если драйвер базы данных не может подготовить его, PDO будет имитировать эту функцию. Здесь все начинает сбиваться с толку, но вы можете смело забыть об этом и просто забыть использовать подготовленные операторы с параметрами.