これを解決してよかったです。ただし、これは理由に対処するためのものです。 なぜbindParam() あなたのために働いていませんでした。これはバグではなく、設計上このように機能します。
ドキュメント による :
(強調鉱山)
上記を考慮すると、これは次のとおりです。
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 }
...各パラメータが対応する配列要素を参照するようにします 。
上で引用したように、別の方法はbindValue()です。 パラメータを値でバインドします 参照ではなく。パラメータがbindValue()の時点で評価されることを意味します が呼び出され、実際に必要なとき(つまり、クエリの実行)ではありません:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindValue(':'.$rowname, $rowvalue);
90 }
もちろん、他の選択肢はexecute()にフィードすることです execute()を可能にするパラメータの配列を使用します バインディング部分を解決します(したがって、私の個人的なお気に入りです!) 。