Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wstawienie danych do bazy z kluczem obcym
uczeń php
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 8.01.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
uczeń php
post
Post #3





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 8.01.2010

Ostrzeżenie: (0%)
-----


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ę ?
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
uczeń php
post
Post #5





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 8.01.2010

Ostrzeżenie: (0%)
-----


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 -->";
}
Go to the top of the page
+Quote Post
darko
post
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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);


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
uczeń php
post
Post #7





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 8.01.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
darko
post
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 04:48