[PHP][MYSQL] Problem z PhpMyAdmin |
[PHP][MYSQL] Problem z PhpMyAdmin |
21.12.2008, 15:32:30
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.12.2008 Ostrzeżenie: (0%) |
Witam, mam nastepujacy problem:
Posiadam na stronie formularz do rejestracji nowych uzytkownikow, kazdy uzytkownik powinien dostawac inny numer UID. Cytat $d1=mysql_num_rows(mysql_query("SELECT uid FROM users"))+1; Niestety nie zawsze tak sie dzieje. Raz dzial prawidlowo, a raz nadaje numer juz istniejacy, wiec mam dwoch uzytkownikow o takim samym numerze.Ustawielm przez phpMyAdmin'a zeby pole UID bylo UNIQUE oraz auto_increment. Niestety kiedy tak zrobie po wypelnieniu formularza rejestracyjnego pojawia sie blad: Cytat Duplicate entry '6' for key 1 Kiedy pole UID jako dzialanie ma ustawione PODSTAWOWY z atrybutem auto_increment dzieje sie tam samo. Kiedy pole UID jest indexem z auto_increment jedynym powtarzajacym sie numerem jest numer najwyzszy, kolejne numery już sa dodawane prawidlowo. Dlaczego tak sie dzieje? |
|
|
21.12.2008, 15:38:38
Post
#2
|
|
Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków |
wyłącz auto_incerment. i możesz tworzyć losową liczbę za pomocą rand. i później sprawdzać czy liczba istnieje w bazie jeśli tak ponawiasz losowanie jeśli nie dodajesz... ja bym coś w tym rodzaju wykombinował.
-------------------- |
|
|
21.12.2008, 15:51:46
Post
#3
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 12 Dołączył: 9.10.2008 Skąd: Tricity.Rumia() Ostrzeżenie: (0%) |
Można to zrobić albo nadając polu uid auto incerement można to zrobić np zapytaniem:
lub za pomocą interfejsu phpmyadmin Można też zrobić transakcję bo wyobraź sobie taką sytuację: jeden user robi select drugi user robi select liczba wierszy jest ta sama teraz pierwszy dodaje rekord drugi otrzymuje błąd. BTW zamiast: $d1=mysql_num_rows(mysql_query("SELECT uid FROM users"))+1; zrob:
|
|
|
21.12.2008, 16:11:46
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) |
Ustaw klucz glowny (lub chociaz UNIQUE) do tego auto increment, zablokuj dostep do bazy, wyedytuj wartosc autoincrement w TAble > Operations w phpMyAdmini na najwieksza wartosc UID + 1 i zapisz. Od tej pory powinno ci dzialac.
A userow dodajesz INSERT INTO users ( name, email ) VALUES ( 'bob', 'bob@example.com' ) ; // czyli pomijasz kolumne UID. -------------------- Nie lubię jednorożców.
|
|
|
21.12.2008, 23:02:39
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.12.2008 Ostrzeżenie: (0%) |
@Piochet
Z count jest o tyle problem ze niekotre rekordy kasowalem, najwyzszy numer uid jest wiekszy niz ilosc wszystkich rekordow. --edit-- Teraz dziela: Cytat list($d1)=mysql_fetch_row(mysql_query("SELECT MAX(uid)+1 FROM users")); Dzieki wszystkim za pomoc. Ten post edytował zelazne_oko 22.12.2008, 14:27:44 |
|
|
Wersja Lo-Fi | Aktualny czas: 21.05.2024 - 23:48 |