Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Duplikat naruszenia integralności Mysql/PDO — podstawowy — chociaż nic nie jest jeszcze w tabeli

Cieszę się, że to rozwiązałeś. Ma to jednak na celu rozwianie powodu dlaczego bindParam() nie pracował dla ciebie. To nie jest błąd, działa w ten sposób zgodnie z projektem.

Zgodnie z dokumentacją :

(podkreślenie moje)

Biorąc pod uwagę powyższe, to:

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

...powiąże każdy parametr z $rowvalue przez odniesienie która w momencie wykonania zapytania zawsze będzie wynosić 1 (ostatni element $rowdata )

Sposób, aby to działało za pomocą bindParam() byłoby coś w stylu:

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

...a może nawet:

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

...aby każdy parametr odwoływał się do odpowiedniej tablicy elementu .

Alternatywą, jak zacytowałem powyżej, byłaby bindValue() który wiąże parametry według wartości a nie przez odniesienie. Oznacza to, że parametr będzie oceniany w czasie bindValue() jest wywoływana, a nie w momencie, w którym jest to faktycznie potrzebne (tj. wykonanie zapytania):

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

Oczywiście inną alternatywą jest karmienie execute() z tablicą parametrów, która pozwala execute() rozwiązać część wiążącą (a więc mój osobisty faworyt!) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proste zapytanie mysql, aby sprawdzić, czy wiersz istnieje

  2. Jak zapełnić racjonalną wielotabelową bazę danych MySQL z istniejącej bazy danych z jedną tabelą?

  3. Jak połączyć dane z wielu tabel za pomocą SQL?

  4. Przekaż hasło do mysql_config_editor za pomocą zmiennej w powłoce

  5. Nie można dodać klucza obcego w MySQL 5.7 (brak ograniczenia w tabeli odniesienia)