Mysql
 sql >> база данни >  >> RDS >> Mysql

Нарушение на целостта на Mysql/PDO Дублиран първичен - въпреки че нищо вече не е в таблицата

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на MySQL клиентски приложения

  2. Как да инсталирате MySQL на CentOS 7

  3. MySQL JOIN и COUNT в единична заявка

  4. mysql намира скорошни потребителски коментари

  5. PHP MySQL PDO:как да запазите водещите нули на колоните zerofill int