sql >> Database teknologi >  >> RDS >> Mysql

Mysql/PDO Integrity Violation Duplicate Primary - selvom intet allerede er i tabellen

Godt du har løst dette. Dette er dog beregnet til at løse årsagen hvorfor bindParam() virkede ikke for dig. Det er ikke en fejl, det fungerer på denne måde.

I henhold til dokumenterne :

(min fremhævelse)

I betragtning af ovenstående er dette:

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
 90                         }

... ville binde hver parameter til $rowvalue ved reference som på tidspunktet for udførelse af forespørgslen altid vil være 1 (det sidste element i $rowdata )

Måden at få det til at fungere ved at bruge bindParam() ville være noget i stil med:

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
 90                         }

...eller måske endda:

 87                         foreach($rowdata as $rowname => &$rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
 90                         }

...så at hver parameter vil referere til det tilsvarende array element .

Et alternativ, som citeret ovenfor, ville være bindValue() som binder parametre efter værdi snarere end ved reference. Det betyder, at parameteren vil blive evalueret på tidspunktet bindValue() kaldes og ikke på det tidspunkt, det faktisk er nødvendigt (dvs. forespørgselsudførelse):

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindValue(':'.$rowname, $rowvalue);
 90                         }

Selvfølgelig er det andet alternativ at fodre execute() med en række parametre, som lader execute() løs den bindende del (dermed min personlige favorit!) .



  1. MAMP Pro mysql kan ikke starte

  2. Hvordan indsætter man i samme tabel i MySQL?

  3. Dynamisk rullemenu for forskellige lande, stater, geografiske placeringer?

  4. SQL OR Operator for begyndere