Радвам се, че реши това. Това обаче има за цел да отговори на причината защо 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()
разреши обвързващата част (по този начин моят личен фаворит!) .