¿Cuál es la diferencia entre bindParam y bindValue?

Resuelto koen asked hace 54 años • 7 respuestas

¿ Cuál es la diferencia entre PDOStatement::bindParam()y PDOStatement::bindValue()?

koen avatar Jan 01 '70 08:01 koen
Aceptado

De la entrada manual paraPDOStatement::bindParam :

[Con bindParam] A diferencia de PDOStatement::bindValue(), la variable está vinculada como referencia y solo se evaluará en el momento en que PDOStatement::execute()se llame.

Así por ejemplo:

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'female'

o

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindValue(':sex', $sex); // use bindValue to bind the variable's value
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'male'
lonesomeday avatar Feb 22 '2011 10:02 lonesomeday

Aquí hay algunos en los que puedo pensar:

  • Con bindParam, sólo puedes pasar variables; no valores
  • con bindValue, puedes pasar ambos (valores, obviamente, y variables)
  • bindParamfunciona solo con variables porque permite que los parámetros se proporcionen como entrada/salida, por "referencia" (y un valor no es una "referencia" válida en PHP) : es útil con controladores que (citando el manual):

admiten la invocación de procedimientos almacenados que devuelven datos como parámetros de salida, y algunos también como parámetros de entrada/salida que envían datos y se actualizan para recibirlos.

Con algunos motores de base de datos, los procedimientos almacenados pueden tener parámetros que se pueden usar tanto para la entrada (dando un valor de PHP al procedimiento) como para la salida (devolviendo un valor del proceso almacenado a PHP); para vincular esos parámetros, debe usar bindParam y no bindValue.

Pascal MARTIN avatar Jul 24 '2009 20:07 Pascal MARTIN