Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wstawienie danych do bazy z kluczem obcym
Forum PHP.pl > Forum > Bazy danych
uczeń php
phpmyadmin wyświetla mi następujący warunek #1452 - Cannot add or update a child row: a foreign key constraint fails (`pozycja_w_google/google`, CONSTRAINT `strony www_ID_fk` FOREIGN KEY (`ID`) REFERENCES `strony www` (`ID`))

Mam dwie tabele jedną z kluczem obcym kod php wstawia mi dane do tylko jednej tabeli do drugiej tabeli z tym kluczem obcym dane nie są wstawiane natomiast wstawienie polecenia insert into do okienka sql w phpmyadminie pokazuje mi warunek ten co u góry.
darko
Próbujesz wstawić rekord z nieistniejącą wartością klucza obcego tabeli zależnej. Najpierw wstaw rekord do tabeli podstawowej (musisz nadać wartość klucza głównego, który jest jednocześnie kluczem obcym w tabeli, z którą masz problemy), obrazowo:

tab1
id_tab1 (PK)
cos_tam1
cos_tam2

tab2
id_tab2 (PK)
id_tab1 (FK)
cos_tam1
cos_tam2

i teraz najpierw musisz zrobić insert do tab1, żeby uzyskać wartość id_tab1. Mam nadzieję, że nie namieszałem. Pzdr.
uczeń php
klucz główny w tabeli nadrzędnej ID int(11) not null auto_increment primary key i w tej pierwszej wartości są wstawiane z tego klucza głównego korzysta druga tabela ale kod php polecenie insert into nie działa, żadne dane nie są wstawiane do drugiej tabeli. Nie wiem czy dobrze ułozyłem zapytanie insert into do drugiej tabeli ale wydaje mi się że można pominąć te wartości. Tak samo jak: insert into nazwatabeli ('imie') values ('Jan') pole ID zostało pominięte dla ID int(11) not null auto_increment ID - jest wstawiane automtycznie i mi się wydaje że tak samo w przypadku kluczy obcych z innych tabel też można pominąć a wartości będą wstawiane automatycznie. No a może się mylę ?
darko
Cytat(uczeń php @ 30.06.2010, 15:52:19 ) *
klucz główny w tabeli nadrzędnej ID int(11) not null auto_increment primary key i w tej pierwszej wartości są wstawiane z tego klucza głównego korzysta druga tabela ale kod php polecenie insert into nie działa, żadne dane nie są wstawiane do drugiej tabeli. Nie wiem czy dobrze ułozyłem zapytanie insert into do drugiej tabeli ale wydaje mi się że można pominąć te wartości. Tak samo jak: insert into nazwatabeli ('imie') values ('Jan') pole ID zostało pominięte dla ID int(11) not null auto_increment ID - jest wstawiane automtycznie i mi się wydaje że tak samo w przypadku kluczy obcych z innych tabel też można pominąć a wartości będą wstawiane automatycznie. No a może się mylę ?

Mylisz się częściowo. Jeśli wstawiasz rekord(y) do tabeli powiązanej (w Twoim przypadku to będzie ta druga tabela) z jakąkolwiek inną tabelą (i masz poustawiane indeksy) to musisz podać wartość klucza obcego, do którego odnosi się dany rekord, inaczej dane nie zostaną wstawione, skąd niby silnik bazy ma wiedzieć, o który klucz Ci chodzi? Pokaż jeszcze zapytanie insert do obydwu tabel, rzuć kawałkiem kodu. Zobaczymy czy o to chodzi.
uczeń php
pierwsza tabela | ID | STRONY WWW | SLOWA FRAZY | - ID klucz główny auto_incerement int
druga tabela | LP | ID | SERWERY GOOGLE | STRONY WWW | SLOWA FRAZY | DATA | POZYCJA W GOOGLE | - LP - klucz główny ID - klucz obcy

a oto zapytania sql

foreach($slowa as $wyniki) {
$pozycja_w_google = $pozycja_strony->getPosition($wyniki, $url);

$zapytanie = "INSERT INTO `pozycja_w_google`.`strony www` (`STRONY WWW` , `SLOWA I FRAZY`) VALUES ('".$url."', '".$wyniki."')";
mysql_query($zapytanie);
print "<!-- Zapytanie; $zapytanie -->";

$zapytanie1 = "INSERT INTO `pozycja_w_google`.`google`
(`SERWERY GOOGLE`,`STRONY WWW` , `SLOWA FRAZY`,`DATA`, `POZYCJA W GOOGLE`) VALUES
('google.pl','".$url."', '".$wyniki."','".date("Y-m-d")."','".$pozycja_w_google."')";
mysql_query($zapytanie1);
print "<!-- Zapytanie; $zapytanie1 -->";
}
darko
Ale w czym problem tkwi? Wstaw na chama idka:

  1. $zapytanie1 = "INSERT INTO `pozycja_w_google`.`google`
  2. (`ID`, `SERWERY GOOGLE`,`STRONY WWW` , `SLOWA FRAZY`,`DATA`, `POZYCJA W GOOGLE`) VALUES
  3. (" . mysql_insert_id() . "'google.pl','".$url."', '".$wyniki."','".date("Y-m-d")."','".$pozycja_w_google."')";
  4. mysql_query($zapytanie1);
uczeń php
zapytanie1 nie miałem wstawionej kolumny `ID` i mysql_insert_id() ale teraz działa jak należy bo dane zostały wstawione.
Dzięki za pomoc
darko
Cytat(uczeń php @ 30.06.2010, 16:23:44 ) *
zapytanie1 nie miałem wstawionej kolumny `ID` i mysql_insert_id() ale teraz działa jak należy bo dane zostały wstawione.
Dzięki za pomoc

Proszę bardzo.
Pozdrawiam
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.