Bei Prepared Statements werden Query und Werte für die Platzhalter getrennt zum Server geschickt. Damit ist man 100% sicher gegen SQL-Injection, da die Werte niemals in einen Kontext geraten können, in dem sie interpretiert würden.
Beim escapen kann rein theoretisch etwas schief laufen, da die Werte direkt im Query stehen und somit mitinterpretiert werden. Es wäre mir allerdings neu, dass die entsprechenden escape-Methoden von MySQLi/PDO Lücken hätten.