これを解決してよかったです。ただし、これは理由に対処するためのものです。 なぜ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()
を可能にするパラメータの配列を使用します バインディング部分を解決します(したがって、私の個人的なお気に入りです!) 。