Como dicen el mismo nombre la diferencia es esa, bindValue ata un parámetro a un valor dado, y bindParam a una variable, por lo que puedes hacer consultas preparadas en un ciclo, por ejemplo:
Código PHP:
Ver original$stmt = $con->prepare("INSERT INTO colors VALUES (?)");
$stmt->bindParam(1, $color, PDO::PARAM_STR);
$colors = array('black', 'blue', 'red', 'yellow'); foreach ($colors as $color) {
$stmt->execute();
}
Con bindValue solo lo haces al valor que le defines al momento que mandas llamar.
El que uses cualquiera de los dos, te ayuda a prevenir inyecciones por el simple hecho de que primero se manda la consulta preparada al servidor y luego mandas los valores, con lo cual previenes la inyección.
Saludos.