Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Brak zliczenia rekordu
Forum PHP.pl > Forum > Przedszkole
Raffuss
Mam taki głupi problem..

Mianowicie nie działa mi następujący kod:
  1. $email = 'test@test.pl';
  2. require_once ('mysql.inc.php'); //połączenie z bazą
  3. $q = mysql_num_rows(mysql_query('SELECT count(email) FROM tabela WHERE email = "'.$email.'" ')) OR die('błąd');
  4. if ($q>0) {
  5. echo 'Rekord istnieje';
  6. } else {
  7. echo 'Rekord nie istnieje';
  8. }

Wypluwa mi informację iż rekord istnieje, choć fizycznie w bazie go nie ma..
markonix
To chyba bez tego count wystarczy winksmiley.jpg
thek
Logika Ci szwankuje. Jakie masz zapytanie? Sprawdziłeś? Takie zapytanie ZAWSZE zwróci dokładnie jeden rekord, który zawiera ilość policzonych maili. Nawet jeśli żaden nie pasuje, to zwróci jeden wiersz wyniku z liczbą 0. Tak więc masz sprawdzać nie ile wierszy ma wynik, ale czy liczba zwrócona w wyniku jest większa od zera. Aby przykład Ci zadziałał zmień sobie przykładowo na:
  1. $q = mysql_result( mysql_query('SELECT count(email) FROM dodatkowem WHERE email = "'.$email.'" '), 0, 0) OR die('błąd');
Raffuss
Niby tak.. ale jak bym chciał sprawdzić ile razy ten rekord w danej tabeli występuje potrzebuję count winksmiley.jpg Dlatego właśnie jest on w zapytaniu do bazy..

Cytat(thek @ 27.11.2010, 18:51:08 ) *
Logika Ci szwankuje. Jakie masz zapytanie? Sprawdziłeś? Takie zapytanie ZAWSZE zwróci dokładnie jeden rekord, który zawiera ilość policzonych maili. Nawet jeśli żaden nie pasuje, to zwróci jeden wiersz wyniku z liczbą 0. Tak więc masz sprawdzać nie ile wierszy ma wynik, ale czy liczba zwrócona w wyniku jest większa od zera. Aby przykład Ci zadziałał zmień sobie przykładowo na:
  1. $q = mysql_result( mysql_query('SELECT count(email) FROM dodatkowem WHERE email = "'.$email.'" '), 0, 0) OR die('błąd');

Wyskakuje błąd.. winksmiley.jpg
markonix
mysql_num_rows

Cytat
Retrieves the number of rows from [...] statements like SELECT


Czyli robisz zapytanie wybierające wiersze z mailem X i liczysz za pomocą wspomnianej funkcji.
thek
Skoro sypie Ci błąd to napisz jaki. Ostatnia szklana kula zbiła mi się rok temu biggrin.gif Bo samo połączenie mysql_query i mysql_result jest na bank prawidłowe. Nieraz tak robiłem i zawsze wynik zwracało. Zamiast die('błąd') daj die( mysql_error() ) i więcej ciut informacji, bo jak dla mnie to co zasugerowałem nie powinno sypnąć błędem a byk tkwi gdzieś indziej. Może źle coś ustawiłeś?
Raffuss
Gdyby sypnął czymś poza napisem błąd, to bym napisał.. a jako że moja szklana kula także jest w naprawie, mam u siebie w kodzie mysql_error() i mimo tego nie pokazuje dosłownie żadnego błędu..
Cysiaczek
Więc po prostu odczytaj zawartość tablicy normalnie, a nie jakimś mysql_result winksmiley.jpg
Zapoznaj się z funkcją mysql_fetch_array() - obacz zwłaszcza komentarze, w których masz napisane, jak się dostać do wierszy.

AHA. Gdybyś nie liczył na szklane kule, to byś wpadł na to, że się usuwa die() przed wywołaniem mysql_error()
Raffuss
Dzięki, tę funkcję też znam.. Pytałem jednak o mysql_num_rows, ponieważ chcę wiedzieć czy to nie działa przez błąd w kodzie czy przez ustawienia maszyny produkcyjnej.. Z całym szacunkiem ale po to jest ta funkcja, żeby sobie życie upraszczać w przypadkach potrzeby wyniku numerycznego..
thek
Mysql_num_rows liczy ile jest wierszy w wyniku, a jak wspomniałem jeśli zrobisz "Select count(coś tam) i dalej", to dostaniesz dokładnie jeden wiersz wyniku. Używanie jej więc w tym przypadku jest bezsensem. Gdybyś nie użył count w zapytaniu - to mysql_num_rows ma sens bo może zapytanie nie zwrócić pasujących wyników. Jeśli jednak na "SELECT count(coś)" się upierasz, to musisz ten rekord odebrać i odczytać co zwrócił. Ja zaproponowałem mysql_result z racji dostępu do wyniku od razu poprzez podanie wiersza i offsetu. Skoro jednak nie działa to obstawiam błąd skryptu, bo funkcję *_num_rows tylko najwięksi debile lub dowcipnisie by na serwerze blokowali. Sprawdź po kolei czy jest naprawdę wszystko w porządku, począwszy od połączenia z bazą, poprzez generowanie zapytania, potem to co zwraca baza. W ktorymś miejscu musi być byk. Ja obstawiałbym coś nie tak z zapytaniem. Die wywala skrypt i dlatego mysql_error wciska się do niego. Umieszczenie mysql_error gdzieś za wywołaniem die jest porównywalne do leżenia na rozebranych torach i czekanie aż przejedzie Cię pociąg winksmiley.jpg Innymi słowy spóźniłeś się ileś tam czasu i nie dojdzie do tego nigdy.
Raffuss
@thek.. dzięki za wskazówki..

Doszedłem przeszukując forum, iż count z num rows w parze nie idą. Error siedział w die, a mimo to nie wyświetlał niczego.. po prostu tutaj wkleiłem uproszczoną wersję, która podczas testowania także nie działała jak trzeba ale zarówno nie zawierała mysql_error() jak i wielu innych rzeczy. Błąd był zgoła gdzie indziej i doszedłem metodą prób i błędów. Kod działający wygląda następująco:
  1. $email = 'test@test.pl';
  2. require_once ('mysql.inc.php'); //połączenie z bazą
  3. $q = mysql_num_rows(mysql_query("SELECT email FROM tabela WHERE email = '$email'")) OR die('błąd');
  4. if ($q==0) {
  5. echo 'Rekord nie istnieje';
  6. } else {
  7. echo 'Rekord istnieje';
  8. }
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.