Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di pdo in php con stored procedure

Devi usare bindValue invece di bindParam .

Quando usi bindParam, associa la variabile fornita al parametro, non il valore della variabile.

Quindi, se lo fai:

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

In realtà viene eseguito con 6 anziché 5. Per fare ciò, il metodo deve avere un riferimento alla variabile. Non puoi avere un riferimento a un valore letterale, quindi questo significa che bindParam non può essere utilizzato con valori letterali (o qualsiasi cosa a cui non puoi avere un riferimento).

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

Quindi:

$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