Ver Mensaje Individual
  #9 (permalink)  
Antiguo 27/01/2012, 09:47
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: PDO e inyección SQL

No es que lo haga PDO, de hecho es un trabajo del RDBMS, aunque PDO trae una capa que emula los prepared statements si es que el RDBMS no soporta eso.

bindParam, sirve para enlazar una variable (por referencia) hacía un prepared statement, te permite hacer cosas así:
Código PHP:
Ver original
  1. $stmt = $pdo->prepare('INSERT INTO colors (color) VALUES (?)');
  2. $stmt->bindParam(1, $color, PDO::PARAM_STR);
  3.  
  4. $color = 'black';
  5. $stmt->execute(); // se inserta black
  6.  
  7. $color = 'blue';
  8. $stmt->execute(); // se inserta blue

O sea la variable queda enlazada por referencia, y sirve para poder también usar variables de entrada y salida en los stored procedures. Un ejemplo del manual:
Código PHP:
Ver original
  1. $colour = 'red';
  2. $sth = $pdo->prepare('CALL puree_fruit(?)');
  3. $sth->bindParam(1, $colour, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
  4. $sth->execute();
  5. print("After pureeing fruit, the colour is: $colour"); // imprime otra cosa que no es red ya que fue cambiada en el stored procedure

Los prepared statements son muy usados sobre todo cuando tienes que hacer muchos inserts (en modo batch) ya que tienen el mejor rendimiento vs usar sql queries normales.

Saludos.