Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd dodania danych - klucz obcy
Forum PHP.pl > Forum > Bazy danych
radca78
Witam

Mam 3 tabele (innoDB).

1. klienci (klientid-klucz glw., pole1, pole2...)
2. ksiazki (ksiazkaid-klucz glw., klientid-klucz obcy do klientid z tabeli klienci, pole1, pole2...)
3. opisy (ksiazkaid-klucz obcy do ksiazkaid z tabeli ksiazki)

Bez ustawionych kluczy obcych, wszystkie dane moge dodawac. Po ustawieniu kluczy jak powyzaj nie moge dodac danych.

Komunikat przy dodaniu danych:
Cannot add or update a child row: a foreign key constraint fails

Poradzcie cos sad.gif
DeyV
Jeżeli są wprowadzone klucze obce i związki oparte na nich, to znaczy, że baza sama bedzie pilnować, byś wprowadzał dane w odpowiedniej kolejności.
W tym przypadku najpierw muisz dodać odpowiedniego klienta, dopiero potem możesz dodać książkę, a dopiero na samym końcu - odpowiedni dla danej książki opis.

Swoją drogą - mam wrażenie, że ten projekt jest nieco chybiony. Co to za baza, w której każda wprowadzona książka musi mieć klienta?
radca78
Kolejność dodawania danych nie ma raczej znaczenia, modyfikując skrypt dodający dane (kolejność ich dodawania) zawsze mogę dodać tylko dane do tablei klienci. Przy pozostalych tabelach mam blad.

Pomijając oczywiście fakt, gdzie której każda wprowadzona książka musi mieć klienta - to tylko przykladowa nazwa.
DeyV
Nawet wtedy, gdzy odpowiednie gdy istnieje odpowiedni rekord w tabeli zewnętrznej? Czyli np. klient, lub książka?
radca78
Dane dodaje jednym formularzem (wszystko razem) do 3 tabel. Tworzę 3 zmienne i kazda z nich jest sprawdzana czy zostala dodana do tablei czy nie.
  1. <?php
  2.  
  3. $wynik1 = mysql_query("INSERT INTO klienci (pole1, pole2, ...) VALUES ('$wart1' , '$wart1' , ...)");
  4. if ($wynik1) {
  5. echo "Dodane dane personalne<br />";
  6. }
  7. else echo "Dane personalne. Błąd: " .mysql_error().__LINE__;
  8.  
  9. $wynik2 = mysql_query("INSERT INTO ksiazki(pole1, pole2, ...) VALUES ('$wart1' , '$wart1' , ...)");
  10. if ($wynik2) {
  11. echo "Dodane dane ksiazek<br />";
  12. }
  13. else echo "Dane ksiazek. Błąd: " .mysql_error().__LINE__;
  14.  
  15. ?>


poprawiam
---
nospor


zmienna 3 analogicznie. Poprawnie dodaje mi tylko zmienna z danymi z $wynik1 - niezaleznie od kolejnosci ich zapisywania. Pozostale 2 zmienne zwracaja komunikat o bledzie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.