Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Problem z utworzeniem tabeli w php/mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
Setesh
Witam.

Mam problem z utworzeniem tabeli w php - niby przykład jest ok ale coś mi nie działa utworzenie tabeli ponieważ mam jakiś błąd w składni - możeci mi podpowiedzieć gdzie ?

Błąd :

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

składnia polecenia :
  1. $query ="user_number MEDIUMINT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT,";
  2. $query.="user_id VARCHAR(8) BINARY NOT NULL,";
  3. $query.="user_name VARCHAR(30) NOT NULL,";
  4. $query.="user_password VARCHAR(20) BINARY NOT NULL,";
  5. $query.="user_country VARCHAR(50) NOT NULL,";
  6. $query.="user_email VARCHAR(50) NOT NULL,";
  7. $query.="user_profile TEXT NOT NULL,";
  8. $query.="user_registre_date DATE DEFAULT '0000-00-00' NOT NULL,";
  9. $query.="user_last_access_time TIMESTAMP(14),";
  10. $query.="PRIMARY KEY(user_id),";
  11. $query.="UNIQUE user_number(user_number)";


Liczę na waszą pomoc bo takie ponoć podstawowe i proste zapytanie a nie wiem co jest w nim źle sad.gif

Jeżeli ktoś może mi jeszcze poradzić jak podzielić bazę danych odnośnie informacji o użytkowniku to też będę wdzięczny.

Docelowo chcę stworzyć 2 tabele dla użytkownika - w pierwszej mają być wszelkie informacje jakie użytkownik będzie podawał podczas rejestracji a w drugiej będą inne informacje powiązane z użytkownikiem i innymi danymi.
nospor
A gdzie zjadles początek, czyli
CREATE TABLE blabla
?
Setesh
  1. $dbname = "komoorkowo";
  2. $user_tablename = "user";
  3.  
  4. $query ="user_number MEDIUMINT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT,";
  5. $query.="user_id VARCHAR(8) BINARY NOT NULL,";
  6. $query.="user_name VARCHAR(30) NOT NULL,";
  7. $query.="user_password VARCHAR(20) BINARY NOT NULL,";
  8. $query.="user_country VARCHAR(50) NOT NULL,";
  9. $query.="user_email VARCHAR(50) NOT NULL,";
  10. $query.="user_profile TEXT NOT NULL,";
  11. $query.="user_registre_date DATE DEFAULT '0000-00-00' NOT NULL,";
  12. $query.="user_last_access_time TIMESTAMP(14),";
  13. $query.="PRIMARY KEY(user_id),";
  14. $query.="UNIQUE user_number(user_number)";
  15.  
  16. $link_id = db_connect();
  17. if(!$link_id) die(sql_error());
  18.  
  19. if(!mysql_query("CREATE TABLE $user_tablename ($query)")) die(sql_error()); // JEST TUTAJ :)
  20. else echo "utworzono tabele";


// EDIT :

query -> $query // poprawiłem przy wywołaniu

teraz mam inny błąd sad.gif

"1067: Invalid default value for 'user_number'"

sad.gif

Jakby co będę około 15:00 to zobaczę co jeszcze dopatrzę się ale nie wiem jaka inna wartość może być poza "0" dla auto inc kiedy nie może być też null sad.gif
nospor
od kiedy dla MEDIUMINT domyslna wartoscią jest tekst?

nie '0'
a: 0
Setesh
$query ="user_number MEDIUMINT(10) DEFAULT 0 NOT NULL AUTO_INCREMENT,";

zmieniłem i nadal że zła wartość sad.gif
nospor
autoincrement nie ma domyslnej wartosci winksmiley.jpg
Setesh
$query ="user_number MEDIUMINT(10) NOT NULL AUTO_INCREMENT,";

no i gitara guitar.gif

Dzięki wielkie smile.gif Zawsze to trochę się nauczyłem smile.gif
nospor
1)
Cytat
[początkujący]

Co to za tag? Tag ma odzwierciedlac rodzaj problemu a nie Twoj stan wiedzy. popraw

2)
nie:MEDIUMINT(10)
a:MEDIUMINT
10 niczemu nie sluzy.

3)
Niby robisz autoincrement user_number, ale jako klucza głównego uzywasz user_id i to na dodatek tekstu. Czemu to niby ma sluzyc? Zazwyczaj kluczem głównym jest autoincrement

4)
user_password VARCHAR(20)
haslo trzymasz jawnie? Zle
Haslo trzymasz w hashu? To po co zmienna dlugosc pola?
Setesh
  1. $dbname = "komoorkowo";
  2. $user_tablename = "user";
  3.  
  4. $query.="user_id MEDIUMINT NOT NULL AUTO_INCREMENT,";
  5. $query.="user_name VARCHAR(30) NOT NULL,";
  6. $query.="user_password VARCHAR(20) BINARY NOT NULL,";
  7. $query.="user_country VARCHAR(50) NOT NULL,";
  8. $query.="user_email VARCHAR(50) NOT NULL,";
  9. $query.="user_profile TEXT NOT NULL,";
  10. $query.="user_registre_date DATE DEFAULT '0000-00-00' NOT NULL,";
  11. $query.="user_last_access_time TIMESTAMP(14),";
  12. $query.="PRIMARY KEY(user_id),";
  13. $query.="UNIQUE user_number(user_number)";
  14.  
  15. $link_id = db_connect();
  16. if(!$link_id) die(sql_error());
  17.  
  18. if(!mysql_query("CREATE TABLE $user_tablename ($query)")) die(sql_error());
  19. else echo "utworzono tabele";


Ok poprawiłem co się dało (mam nadzieję że dobrze) ale nie wiem jak z hasłem zrobić sad.gif Mógłbym prosić o gotowy przykład jak to zrobić aby było zahashowane ? Czytałem o opcji
  1. password($user_password);
i że ponoć samo hash załatwia (a może coś mi się pomyliło sad.gif )

Zmieniłem unikalny element na user_email i user_name (wydawało się najrozsądniejsze) :

  1. $query.="UNIQUE user_email(user_email, user_name)";


Obecne zapytanie wygląda tak :

  1. $query.="user_id MEDIUMINT NOT NULL AUTO_INCREMENT,";
  2. $query.="user_email VARCHAR(50) NOT NULL,";
  3. $query.="user_password CHAR BINARY NOT NULL,";
  4. $query.="user_name VARCHAR(30) NOT NULL,";
  5. $query.="user_country VARCHAR(50) NOT NULL,";
  6. $query.="user_profile TEXT NOT NULL,";
  7. $query.="user_registre_date DATE DEFAULT '0000-00-00' NOT NULL,";
  8. $query.="user_last_access_time TIMESTAMP(14),";
  9. $query.="PRIMARY KEY(user_id),";
  10. $query.="UNIQUE user_email(user_email, user_name)";


Zamieniłem user_password z
  1. VARCHAR(20) na CHAR
(nie wiem czy dobrze).
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.