Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de pdo en php avec une procédure stockée

Vous devez utiliser bindValue au lieu de bindParam .

Lorsque vous utilisez bindParam, il lie la variable fournie au paramètre, pas la valeur de la variable.

Donc, si vous le faites :

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

Il est en fait exécuté avec 6 au lieu de 5. Pour ce faire, la méthode doit avoir une référence à la variable. Vous ne pouvez pas avoir de référence à un littéral, cela signifie donc que bindParam ne peut pas être utilisé avec des littéraux (ou quoi que ce soit auquel vous ne pouvez pas avoir de référence).

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

Ensuite :

$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