我收到错误: .....中无法通过参考传递参数2
在这一行...
$stmt1->bindParam(':value', $_SESSION['quantity'.$i] * $_SESSION['price'.$i], PDO::PARAM_STR);
上面的代码有什么问题?
答案 0 :(得分:6)
我想说这是PDO:bindParam()与您可能打算使用的内容之间的典型混淆:PDO:bindValue()。
PDOStatement::bindParam
将PHP变量绑定到相应的命名或问号 占位符在用于准备的SQL语句中 声明。与
PDOStatement::bindValue()
不同,变量是绑定的 作为参考,只会在当时进行评估PDOStatement::execute()
被称为。{/ p>
PDOStatement::bindValue
将值绑定到相应的命名或问号占位符 用于准备语句的SQL语句。
答案 1 :(得分:4)
它希望第二个参数是一个可以通过引用传递的变量。假设$stmt1
是PDO语句,那么作为bindparam的docs说
与PDOStatement :: bindValue()不同,该变量被绑定为引用 并且只会在PDOStatement :: execute()的时候进行评估 调用。
你的第二个参数是表达式($_SESSION['quantity'.$i] * $_SESSION['price'.$i]
)而不是变量。由于您似乎现在想要评估排毒,我猜您应该使用bindValue()
代替。