Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Max ID
Forum PHP.pl > Forum > Przedszkole
Mitop
Witam, robię stronę i mam problem. Męczę już się nad tym z ponad godzinę. Jeśli ktoś ma chwilkę to z góry dziękuję. Popatrzcie na kod:
  1. $nazwa = $_POST['nazwa'];
  2. $wiek = $_POST['wiek'];
  3. $plec = $_POST['plec'];
  4. $zdjecie = $_POST['zdjecie'];
  5. $sql = "SELECT MAX(ID) FROM zwierzeta";
  6. if($rezultat = @$polaczenie->query($sql))
  7. {
  8.  
  9. $val = intval($rezultat->fetch_assoc())+1;
  10. $sql2="INSERT INTO `zwierzeta` (`ID`, `Nazwa`,`plec`, `Wiek`, `zdjecie`) VALUES ('$val', '$nazwa','$plec', '$wiek', '$zdjecie')";
  11. $wynik = $polaczenie->query($sql2);
  12. $_SESSION['zwierze'] = true;
  13. header("Location: panel.php");
  14. }
  15. $polaczenie->close();
  16. }


Chcę pobrać największą wartość id, żeby wiedzieć jakie ID ma być mojego zwierzaka którego chce wrzucic do baz danych. Lecz mój wynik to ciągle 1 albo 0. A kiedy w bazach danych normalnie w wierszu poleceń wpiszę to normalnie zwraca mi "6". Co zrobić, żeby moja zmienna val również przyjmowała prawidłową wartość? Co robię źlę? Pozdrawiam
Szado
  1. $rezultat->fetch_assoc()

Powyższa metoda (sądząc po jej nazwie) zwraca tablicę asocjacyjną, którą Ty później rzutujesz do integera.
Mitop
A jak wziąć zawartość?
Szado
Nie wiem z jakiego rozszerzenia bazodanowego korzystasz, ale jeśli z MYSQLi to:
  1. $val = $rezultat->fetch_row();
  2. $val = $val[0];
Przemek19
mysqli_num_rows
nospor
@Przemek19 twoje polecenie zwraca liczbe rekordow zwroconych przez zapytanie select a nie najwieksze ID...
Mitop
Szado dałem ci pomógł bo zadziałało, nie chciałem pisać następnego posta z podziękowaniami biggrin.gifD.. Ale jednak piszę bo mam podobny znowu problem i nie wiem ocb
  1. $wierz = $rezultat->fetch_assoc();
  2. $_SESSION['username'] = $wierz['username'];
  3. $_SESSION['gosc']=true;
  4. $_SESSION['idg']=$wiersz['ID'];
  5. //$val = $rezultat->fetch_row();
  6. //$val = $val[0];
  7. //$_SESSION['idg']=$val[0];



Czemu username normalnie wyswietla, jednak ID jest ciągle równe 0, a powinno być 1? Próbuje na różnorakie sposoby i ciągle nie wychodzi.
$_SESSION usernama działa normalnie
Jednak zmienna idg ciągle ma wartość 0 a nie 1. Jakby nie pobierało w ogole, pomoże ktoś biggrin.gif?
nospor
znajdz 10 roznic:

$wierz
$wiersz
Mitop
O kurde, serio szukałem błędu, nie że od razu na forum lecę, dzięki, bierz pomógł biggrin.gifD
nospor
Wlacz wyswietlanie wszystkich bledow, to nie bedziesz musial szukac bo takie bledy beda ci sie same przed nosem wyswietlac
Boshi
Ja bym jednak odapliłe jakieś IDE które takie błędy wyłapuje bez potrzeby uruchomienia skryptu.
drogimex
Taka mała uwaga - unikaj tworzenia kolumn "id". Lepiej zrobić np. "zwierzeta_id". Przy bardziej rozbudowanych bazach odczujesz zalety takiego podejścia jeśli przyjdzie Ci robić kilka złączeń (inner, left, right join).

Po drugie Twoje założenie z pobraniem MAX(id), które za chwilę używasz z insert jest mocno ryzykowne... A co jeśli w tej samej sekundzie dojdzie do dwóch wywołań Twojego skryptu?

Czy nie lepiej po prostu zwierzeta_id ustawić jako AUTO_INCREMENT z PRIMARY KEY i przy insert wskazywać wartość NULL, albo w ogóle pomijać to? Wtedy zawsze masz pewność, że wstawisz unikalny kolejny i unikalny ID bo zrobi to za Ciebie silnik bazy a nie PHP.
nospor
Cytat
Taka mała uwaga - unikaj tworzenia kolumn "id". Lepiej zrobić np. "zwierzeta_id". Przy bardziej rozbudowanych bazach odczujesz zalety takiego podejścia jeśli przyjdzie Ci robić kilka złączeń (inner, left, right join).
Wlasnie nie. Tworzenie sztucznej nazwy dla id jest bez sensu. Skoro wie, ze jest w tabeli zwierzeta to id dotyczy zwierzeta. Tylko zbedne wydluzanie nazwy. Nie wiem jaka zalete widzisz w swoim rozwiazaniu przy zlaczeniach
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-2024 Invision Power Services, Inc.