sql >> Databáze >  >> RDS >> Mysql

Porušení integrity Mysql/PDO Duplicate Primary – ačkoli v tabulce již nic není

Jsem rád, že jsi to vyřešil. Tím se však řeší důvod proč bindParam() nefungovalo pro vás. Není to chyba, funguje to tak podle návrhu.

Podle dokumentů :

(důraz můj)

S ohledem na výše uvedené:

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

...by navázal každý parametr na $rowvalue odkazem která v době provádění dotazu bude vždy 1 (poslední prvek $rowdata )

Způsob, jak to zprovoznit pomocí bindParam() by bylo něco jako:

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

...nebo možná dokonce:

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

...aby každý parametr odkazoval na odpovídající prvek pole .

Alternativou, jak je uvedeno výše, by byla bindValue() který váže parametry hodnotou spíše než odkazem. To znamená, že parametr bude vyhodnocen v okamžiku bindValue() je voláno a ne v okamžiku, kdy je skutečně potřeba (tj. provádění dotazu):

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

Samozřejmě druhou alternativou je podávání execute() s řadou parametrů, které umožňují execute() vyřešit část vazby (tedy můj osobní favorit!) .



  1. Jak mohu napsat vyhledávání MySQL, které dokáže kompenzovat chybně napsaná data?

  2. Úvod do Java Security API

  3. Alternativa MySQL k T-SQL WITH TIES

  4. ROW_NUMBER v SQL – Vyberte Nejlepší příklad v SQL a SQL Server