I'd like to add a few points.
PDO is an abstraction layer, which makes it easier to change your target DBMS without having to change your code.
A prepared statement is an SQL statement written with placeholders. Upon first use, your target DBMS is asked to compile (optimize it). You client code may then call it repeatedly with different parameters.
A stored procedure is also an SQL statement written with placeholders. It is designed and exists entirely within the DBMS. It is compiled on creation, or on alteration. All clients that call it, are calling the same procedure. They can also be associated with a schema, have user and login level permissions, and other things.
Here's a few points of interest:
1) A prepared statement cannot be stored.
2) You can use a PDO prepared statement to call a stored procedure, assuming your DBMS (E.G. MSSQL) supports them.