Педантически, нет, это не на 100% безопасно (что вы обычно получаете из подготовленных заявлений в целом). Это связано с тем, что в MySQL PDO внутренне эмулирует подготовленные операторы . Это означает, что данные экранируются, поэтому использование готовых операторов над экранированием не имеет смысла, если речь идет о PDO (по крайней мере с настройками по умолчанию).
Вы можете изменить это, установив PDO::setAttribute(PDO::ATTR_EMULATE_PREPARES, 0)
в соединении.
MySQLi использует действительно подготовленные операторы, поэтому я бы предложил использовать его вместо этого.