很高兴您解决了这个问题。然而,这是为了应对 理由 为什么
bindParam()不为你工作。这不是错误,它是通过设计以这种方式工作的。
根据文档:
将PHP变量绑定到用于准备语句的SQL语句中的相应命名或问号占位符。与PDOStatement :: bindValue()不同,该变量被绑定
为引用,并且仅在调用PDOStatement :: execute()时进行评估 。
(强调我的)
考虑到上述情况,这是:
87 foreach($rowdata as $rowname => $rowvalue) 88 { 89$stmt->bindParam(':'.$rowname, $rowvalue); 90 }…将
$rowvalue通过 查询将每个参数绑定到 引用 ,在执行查询时,该 引用 将始终是
1(的最后一个元素
$rowdata)
使用它的方式
bindParam()可能是这样的:
87 foreach($rowdata as $rowname => $rowvalue) 88 { 89$stmt->bindParam(':'.$rowname, $rowdata[$rowname]); 90 }…或者,甚至:
87 foreach($rowdata as $rowname => &$rowvalue) 88 { 89$stmt->bindParam(':'.$rowname, $rowvalue); 90 }…,以便每个参数都引用相应的array 元素 。
如上所述,一种替代方法是 _通过值_而不是通过引用
bindValue()绑定参数。这意味着将在调用该参数时对其进行评估,而不是在实际需要该参数时(即查询执行)进行评估:__
bindValue()
87 foreach($rowdata as $rowname => $rowvalue) 88 { 89$stmt->bindValue(':'.$rowname, $rowvalue); 90 }当然,另一种选择是输入
execute()一组参数,这可以
execute()解析绑定部分 (因此是我个人的最爱!) 。



