sql >> Base de Datos >  >> RDS >> Mysql

Usando pdo en php con procedimiento almacenado

Debe usar bindValue en lugar de bindParam .

Cuando usa bindParam, vincula la variable proporcionada al parámetro, no el valor de la variable.

Entonces, si lo haces:

$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5

En realidad, se ejecuta con 6 en lugar de 5. Para hacer esto, el método debe tener una referencia a la variable. No puede tener una referencia a un literal, lo que significa que bindParam no se puede usar con literales (o cualquier cosa a la que no pueda tener una referencia).

$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6

Entonces:

$stmt->bindParam(1, 1, PDO::PARAM_INT); 
//invalid because there's no way to pass a literal 1 by reference
$stmt->bindValue(1, 1, PDO::PARAM_INT);
//valid