Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando pdo em php com procedimento armazenado


Você precisa usar bindValue em vez de bindParam .

Quando você usa bindParam, ele associa a variável fornecida ao parâmetro, não o valor da variável.

Então, se você fizer:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5

Na verdade, é executado com 6 em vez de 5. Para fazer isso, o método deve ter uma referência à variável. Você não pode ter uma referência a um literal, então isso significa que bindParam não pode ser usado com literais (ou qualquer coisa que você não possa ter uma referência).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6

Então:
$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