Fijn dat je dit hebt opgelost. Dit is echter bedoeld om de reden aan te pakken waarom bindParam()
werkte niet voor jou. Het is geen bug, het werkt zo ontworpen.
Volgens de docs :
(nadruk van mij)
Gezien het bovenstaande, dit:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...zou elke parameter binden aan $rowvalue
op referentie die, op het moment van uitvoering van de query, altijd 1
. zal zijn (het laatste element van $rowdata
)
De manier om het te laten werken met bindParam()
zou zoiets zijn als:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
90 }
...of misschien zelfs:
87 foreach($rowdata as $rowname => &$rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...zodat elke parameter zou verwijzen naar het corresponderende array element .
Een alternatief, zoals hierboven geciteerd, is bindValue()
die parameters bindt op waarde in plaats van door verwijzing. Dit betekent dat de parameter zou worden geëvalueerd op het moment dat bindValue()
wordt aangeroepen en niet op het moment dat het echt nodig is (dwz het uitvoeren van een query):
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindValue(':'.$rowname, $rowvalue);
90 }
Het andere alternatief is natuurlijk het invoeren van execute()
met een reeks parameters, waarmee execute()
los het bindende deel op (dus mijn persoonlijke favoriet!) .