Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wykryć brak wyników?
Forum PHP.pl > Forum > Bazy danych > MySQL
8rol
Witam, mam następujący problem.


W jaki sposób wykryć, że funkcja mysql_query dla danego zapytania zwraca 0 wyników?

Prosty przykład o co chodzi.

$zapytanie = mysql_query("SELECT `wiek` FROM `uczniowie` WHERE `imie` = 'Alek' LIMIT 1");

$wynik = mysql_result($check, 0);

Jeśli w tabeli `uczniowie` istnieje osoba o imieniu 'Alek' w zmiennej $wynik znajdzie się jego wiek.
Jednak jeśli w tabeli nie ma osoby o imieniu 'Alek' funkcja mysql_result nie zadziała dając komunikat: "Unable to jump to row 0 on MySQL result (..)".

Z tego tez powodu chciałbym wiedzieć czy istnieje jakiś sposób na wykrycie, że funkcja mysq_query zwraca 0 wyników.

Owszem, wiem, że mógłbym najpierw wykonać zapytanie z funkcją COUNT(), aby sprawdzić czy nie zwraca ona 0, jednak wtedy będzie potrzebne kolejne zapytanie SELECT, które dopiero pobierze `wiek`, a zależy mi żeby zapytań było raczej jak najmniej smile.gif
erix
Hmm, przecież jak używasz mysql_fetch_array to zwraca ona albo rekord, albo false (jeśli błąd albo nie ma rekordów).
8rol
W zasadzie też można, ale przypomniałem sobie o funkcji mysql_num_rows , która wydaje się, że będzie do tego najlepsza smile.gif
Mchl
Cytat(erix @ 24.06.2010, 17:09:58 ) *
Hmm, przecież jak używasz mysql_fetch_array to zwraca ona albo rekord, albo false (jeśli błąd albo nie ma rekordów).


Jeśli błąd. Jeśli nie ma rekordów zwraca pusty resultset. Wrong... z mysql_query mi się pomyliło tongue.gif

mysql_num_rows() jak najbardziej do tego jest stworzona.
erix
Cytat
W zasadzie też można, ale przypomniałem sobie o funkcji mysql_num_rows , która wydaje się, że będzie do tego najlepsza

Nie będzie najlepsza. Jeśli sprawdzamy, czy są dane, bez konieczności sprawdzenia, ile jest rekordów, mysql_num_rows OMIJAMY z daleka. O ile pamiętam, to nawet w manualu jest coś o tym napisane, ale chyba w komentarzach. Nawet jeśli jest potrzebna konkretna liczba rekordów - są inne sposoby, które są zalecane, bo mysql_num_rows jest chyba najbardziej zasobożernym sposobem.

Co nie zmienia faktu, że to logiczne - nie musisz liczyć, ile masz piłeczek w pudełku, skoro wystarczy do niego zerknąć, żebyś wiedział, że coś w nim jest. winksmiley.jpg
sebekzosw
  1. $wyniki = mysql_fetch_assoc(mysql_query("SELECT * FROM `uczniowie` WHERE `imie` LIKE 'Alek' LIMIT 1;"));
  2.  
  3. if(!empty($wyniki))
  4. {
  5. //instrukcje wykonywane, jeżeli nie jest pusta tablica $wyniki
  6. }
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.