sql >> Databasteknik >  >> RDS >> Mysql

Använda pdo i php med lagrad procedur

Du måste använda bindValue istället för bindParam .

När du använder bindParam binder den variabeln som tillhandahålls till parametern, inte värdet på variabeln.

Så om du gör det:

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

Den exekveras faktiskt med 6 snarare än 5. För att göra detta måste metoden ha en referens till variabeln. Du kan inte ha en referens till en bokstavlig, så detta betyder att bindParam inte kan användas med bokstaver (eller något som du inte kan ha en referens till).

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

Sedan:

$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


  1. FEL 1005 (HY000):Kan inte skapa tabell (errnr:150)

  2. När ska man använda en vänster ytterskarv?

  3. Förhindrar JDBC-specifikationen '?' från att användas som operator (utanför citattecken)?

  4. Åtgärda fel 1064 (42000) när du använder MINUS-operatören i MariaDB