Hay dos excelentes ejemplos en pdo::prepare() documentación.
Los he incluido aquí y los he simplificado un poco.
Este usa ?
parámetros $dbh
es básicamente un objeto PDO. Y lo que estás haciendo es poner los valores 150
y 'red'
en el primer y segundo signo de interrogación respectivamente.
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
Este usa parámetros con nombre y es un poco más complejo.
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();