Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Błąd mysql
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,

Mam takie oto zapytanie ktore przerabialem z postgreSQL do MySQL

  1. <?php
  2.  
  3.    require('conn.php');
  4.    
  5.    $sql = "CREATE TABLE adres (
  6.        adres_id SERIAL PRIMARY KEY NOT NULL,
  7.        jednostka_id int,
  8.        sadres1 varchar(255),
  9.        sadres2 varchar(255),
  10.        smiasto varchar(255),
  11.        skod varchar(10),
  12.        styp varchar(50),
  13.        CONSTRAINT fk_adres_jednostka_id
  14.            FOREIGN KEY (jednostka_id) REFERENCES jednostka(jednostka_id)
  15.        )";
  16.        
  17.    $query = mysql_query($sql) or die(mysql_error());
  18. ?>


No i wywala mi nastepujacy błąd :

Cytat
Can't create table 'contactmanager.adres' (errno: 150)


Nie wiem jak sobei z tym poradzic bo pierwszy raz spotykam sie z CONSTRAINT i FOREIGN KEY no i mysle ze to chyba przez to cos nie tak.....
nospor
a jak wyglada zapytanie tworzące tabelę "jednostka" ?
No i zakladam ze ta tabela juz istnieje przed wykonywaniem tego zapytania co tu podales?
Wolfie
NIe istnieje, to jest pierwsza tabela w tej bazie danych ktora chce utworzyc
nospor
no to nic dziwnego, ze sie wywala, skoro tworzysz relacje do tabeli, ktora nie istnieje.

jak chcesz pominac sprawdzanie relacji to wykonaj najpierw takie zapytanie:
  1. SET FOREIGN_KEY_CHECKS=0;

I jak bedzie po wszystkim, to:
  1. SET FOREIGN_KEY_CHECKS=1;
Wolfie
Ok, ale dodac to przed zapytaniem sql ? w zapytaniu ? po zapytaniu ? Czy gdzies w SQL Administratorze albo phpMyAdminie ?
erix
Zrób sobie mysql_query" title="Zobacz w manualu PHP" target="_manual z ustawianiem przed tym zapytaniem.
Wolfie
Wpisalem w phpMyAdminie zapytanie SET FOREIGN_KEY_CHECKS = 0 ; dla bazy danych ale wywalilo komunikat ze nie ma takiej tabeli smile.gif
erix
Tylko to wpisałeś?
Wolfie
Cytat
Zrób sobie mysql_query z ustawianiem przed tym zapytaniem.


Chodzi Ci o cos takiego ? bo nie rozumiem tego zdania

  1. <?php
  2. $query = mysql_query(SET FOREIGN_KEY_CHECKS=0,$sql) or die(mysql_error());
  3. ?>


---------------------------------------------

Tak tylko to wpisalem
erix
Tylko jeszcze z cudzysłowami ;]

I dopiero potem Twoje zapytania.
Wolfie
Dodałem cudzyslowy a teraz jest cos takiego :

Cytat
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\Apache\htdocs\OOP\PHP5\PHP5_ZP\ContactManager\adres_table.php on line 19



A zapytanie wyglada tak :

  1. <?php
  2. $query = mysql_query("SET FOREIGN_KEY_CHECKS=0",$sql) or die(mysql_error());
  3. ?>
erix
Wiesz, po co jest drugi parametr w mysql_query" title="Zobacz w manualu PHP" target="_manual?
nospor
no ale mysl... po co te $sql na koncu?

  1. <?php
  2. $query = mysql_query('SET FOREIGN_KEY_CHECKS=0') or die(mysql_error());
  3. ?>
Wolfie
Z tego co wyczytalem to identyfikator połączenia smile.gif

Cytat
no ale mysl... po co te $sql na koncu?


Myslalem ze da sie zalatwic wszystko w jednym wywolaniu mysql_query i utworzenie tabeli i ustawienie checks=0
erix
raz: jedno mysql_query" title="Zobacz w manualu PHP" target="_manual umożliwia odpalanie tylko jednego zapytania zarazem.
dwa: dobrze wyczytałeś.
Wolfie
Problem znow sie pojawil ale co dziwne w tablicy gdzie nie ma ani kluczy obcych anie polecenia CONSTRAINT

Oto zapytanie :
  1. <?php
  2.  
  3.    require('conn.php');
  4.    
  5.    $sql = "CREATE TABLE jednostka (
  6.        jednostka_id SERIAL PRIMARY KEY NOT NULL,
  7.        snazwa1 varchar(100) NOT NULL,
  8.        snazwa2 varchar(100) NOT NULL,
  9.        ctyp char(1) NOT NULL
  10.        )";    
  11.        
  12.    $query = mysql_query('SET FOREIGN_KEY_CHECKS=0') or die(mysql_error());    
  13.    $query = mysql_query($sql) or die(mysql_error());
  14.  
  15. ?>


No i znowu ten sam błąd, nawet gdy uzywam SET FOREIGN_KEY_CHECKS = 0; .......

Cytat
Can't create table 'contactmanager.jednostka' (errno: 150)


Teraz juz nie kumam o co chodzi......
erix
Na odwrót...
Wolfie
Wybacz, ale nie rozumiem.....
erix
Zamień zapytania kolejnością... dry.gif
Wolfie
Zamienilem , nic to nie dalo.....

Zreszta logicznie myslac wogole tutaj nie powinno byc SET FOREIGN_KEY_CHECKS, no ale niewazne czy jest czy nie ma i w ktorym miejscu to i tak wywala blad, no i niewazne czy jest ustawione na 1 czy 0, przetestowalem wszystkie mozliwosci.....i nic....

---------------------------------------------------------------------------------------------------

W zwiazku z powyzszym postanowilem usunac wszystkie tabele z bazy danych i te ostatnio utworzyc jako pierwsza poniewaz to do niej wlasnie wystepuje referencja w kazdej innej tabeli. Po usunieciu ostatnie zapytanie udalo sie bez problemu, niestety gdy odpalilem kolejny skrpytp :

  1. <?php
  2.  
  3.    require('conn.php');
  4.    
  5.    
  6.    $sql = "CREATE TABLE adres (
  7.        adres_id SERIAL PRIMARY KEY NOT NULL,
  8.        jednostka_id int,
  9.        sadres1 varchar(255),
  10.        sadres2 varchar(255),
  11.        smiasto varchar(255),
  12.        skod varchar(10),
  13.        styp varchar(50),
  14.        CONSTRAINT fk_adres_jednostka_id
  15.            FOREIGN KEY (jednostka_id) REFERENCES jednostka(jednostka_id)
  16.        )";
  17.        
  18.    $query = mysql_query($sql) or die(mysql_error());
  19. ?>


Oczywiscie pojawil sie ten sam błąd, takze pod dodaniu do niego kolejnego zapytania :

  1. <?php
  2. $query = mysql_query('SET FOREIGN_KEY_CHECKS=0') or die(mysql_error());
  3. ?>


Nie kumam co jest nie tak.....przeciez to wydaje sie proste jak drut......

Prosze o pomoc
erix
Wolę się zapytać, jak zamieniłeś...
Wolfie
Zamienilem w ten sposob , kolejnoscia :

  1. <?php
  2.  
  3.    require('conn.php');
  4.    
  5.    $sql = "CREATE TABLE jednostka (
  6.        jednostka_id SERIAL PRIMARY KEY NOT NULL,
  7.        snazwa1 varchar(100) NOT NULL,
  8.        snazwa2 varchar(100) NOT NULL,
  9.        ctyp char(1) NOT NULL
  10.        )";
  11.            
  12.    $query = mysql_query($sql) or die(mysql_error());
  13.    $query = mysql_query('SET FOREIGN_KEY_CHECKS=0') or die(mysql_error());    
  14.    
  15.    echo 'Tabela utworzona!';
  16. ?>
erix
Miałem na myśli zapytania...

brzydal.gif
Wolfie
Czyli co , najpierw utworzyc tabele jednostka a pozniej dopiero kolejne.....tez tak zrobilem.

tabela jednostka powstaje wtedy bez problemow ale pojawia sie ten sam bład gdy probuje utworzyc tabele adres mimo ze posiada set foreign_key....
erix
Już powoli mi wysiada cierpliwość:
  1. <?php
  2. $query = mysql_query('SET FOREIGN_KEY_CHECKS=0') or die(mysql_error());    
  3. $query = mysql_query($sql) or die(mysql_error());
  4. ?>

Tak próbowałeś?

Bo patrząc po listingach wyżej - nie...
Wolfie
No oczywiscie ze tak probowalem, tak probowalem za pierwszym razem.......(nawet na PW dostales ten kod)

Utworzylem tabele :

  1. <?php
  2.  
  3.    require('conn.php');
  4.    
  5.    $sql = "CREATE TABLE jednostka (
  6.        jednostka_id SERIAL PRIMARY KEY NOT NULL,
  7.        snazwa1 varchar(100) NOT NULL,
  8.        snazwa2 varchar(100) NOT NULL,
  9.        ctyp char(1) NOT NULL
  10.        )";
  11.            
  12.    $query = mysql_query($sql) or die(mysql_error());
  13.    
  14.    echo 'Tabela utworzona!';
  15. ?>


A nastepnie :

  1. <?php
  2.  
  3.    require('conn.php');
  4.    
  5.    $sql = "CREATE TABLE adres (
  6.        adres_id SERIAL PRIMARY KEY NOT NULL,
  7.        jednostka_id int,
  8.        sadres1 varchar(255),
  9.        sadres2 varchar(255),
  10.        smiasto varchar(255),
  11.        skod varchar(10),
  12.        styp varchar(50),
  13.        INDEX jedn_ind (jednostka_id),
  14.        CONSTRAINT fk_adres_jednostka_id
  15.            FOREIGN KEY (jednostka_id) REFERENCES jednostka(jednostka_id)
  16.            ON DELETE CASCADE
  17.        )ENGINE=INNODB";
  18.        
  19.        
  20.        $query = mysql_query('SET FOREIGN_KEY_CHECKS=0') or die(mysql_error());
  21.    $query = mysql_query($sql) or die(mysql_error());
  22.        
  23. ?>


No i blad ciagle ten sam....

Probowalem tez odwrotna kolejnosc, no i zawsze Tworzy sie tylko pierwsza tabela a druga juz wywala blad, zeby nie bylo nieporozumien to do drugiej tabeli tez dokladam SET FOREIGN_KEY_CHECKS, probowalem i bez FOREIGN_KEY_CHECKS, wszystkie kombinacje juz przetestowalem i ciagle ten blad,......
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.