[PHP/MySQL] Funkcje mysql_query()/mysql_fetch_array()

0

Czy zapytania wysłane do bazy poprzez funkcję mysql_query(); rządzi się jakimiś innymi prawami, niż wpisane "z ręki" (poprzez phpMyAdmina)?
Czytałem to: http://pl2.php.net/manual/pl/function.mysql-query.php i nie znalazłem nic na ten temat, tymczasem praktyka mówi mi coś innego....

EDIT: Problem się nieco przekształcił - przejdź do następnego posta

Jest sobie skrypt php (dłuuugi, nie będę go tu przytaczał), który w zmiennej $zapytanie dosyć złożone zapytanie SQL.

Następnie, tak jak zwykle, łączę się z bazą (mysql_connect - funkcja zwraca mi resource ID, więc połączyłem się poprawnie). Wybieram bazę (mysql_select_db).

Wywołuję
$wynik=mysql_query($zapytanie);
i zaraz potem
mysql_fetch_array($wynik);

Później próbuję to wyświetlić, ale to nieistotne.

Przy próbie uruchomienia tego skryptu dostaję komunikat:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in pokaz_hotel.php on line 29

w linijce 29 oczywiście jest funkcja mysql_fetch_array().

Najprostszy wniosek jest taki, że zapytanie zostało źle skonstruowane, aby to więc sprawdzić wywołuję przed mysql_query:
echo("$zapytanie");

Wynik:

SELECT klasa.id_klasy, klasa.cena, klasa.ilosc_lozek, klasa.telewizor, klasa.telefon, klasa.internet, klasa.lazienka, klasa.barek, COUNT(pokoj.id_klasy) AS ilość_pokoi FROM hotel, pokoj, klasa WHERE (pokoj.id_klasy=klasa.id_klasy) AND (hotel.id_hotelu=2) GROUP BY pokoj.id_klasy

Wywołanie tego samego w phpMyAdmin nie powoduje błędu, a elegancko zwraca w efekcie 3 wiersze - czyli zapytanie jest poprawne...

Strasznie Was proszę o pomoc, bo od 2 godzin się gapię na ten kod i nie wiem, o co chodzi... Gdzie może być błąd? Zaznaczam, że nie jest to pierwszy skrypt z połączeniem z bazą danych - w drugim pliku dokładnie to samo (tylko z innym, prostszym zapytaniem) działa bez problemu...

EDIT: Aha, jeżeli to istotne - to jako serwer używam najnowszego Krasnala...

0

Hmm... Spróbuj może użyć mysql_error, by dowiedzieć się, co jest źle w zapytaniu (jeśli to zapytanie jest źle wykonywane) między mysql_query a mysql_fetch_array...

0

Postarałem się ograniczyć rozmiar problemu:

$sql=mysql_connect(DANE BAZY);
echo ("wynik połączenia się z bazą: $sql<br><Br>");
mysql_select_db("jakubs");
$zapytanie="SELECT klasa.id_klasy, klasa.cena, klasa.ilosc_lozek, klasa.telewizor, klasa.telefon, klasa.internet, klasa.lazienka, klasa.barek, COUNT(pokoj.id_klasy) AS ilość_pokoi FROM hotel, pokoj, klasa WHERE (pokoj.id_klasy=klasa.id_klasy) AND (hotel.id_hotelu=$hotel) GROUP BY pokoj.id_klasy";
echo($zapytanie);
$wynik=mysql_query($zapytanie); 
mysql_error();
$wiersz=mysql_fetch_array($wynik);

Wynik:

wynik połączenia się z bazą: Resource id #3

SELECT klasa.id_klasy, klasa.cena, klasa.ilosc_lozek, klasa.telewizor, klasa.telefon, klasa.internet, klasa.lazienka, klasa.barek, COUNT(pokoj.id_klasy) AS ilość_pokoi FROM hotel, pokoj, klasa WHERE (pokoj.id_klasy=klasa.id_klasy) AND (hotel.id_hotelu=2) GROUP BY pokoj.id_klasy
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pokaz_hotel.php on line 11

Czyli mysql_error() (ani też mysql_error($sql) )nie wyświetla żadnego błędu.

EDIT:

Właśnie zmodyfikowałem zapytanie - usunąłem

COUNT(pokoj.id_klasy) AS ilość_pokoi 

. W takiej formie wszystko działa. ALE!

  1. Dlaczego ten COUNT() nie chce działać tutaj, skoro w phpAdminie jest OK?
  2. Co mam zrobić, aby działał (on mi tam jest potrzebny!)

Wygląda na to, że funkcja mysql_fetch_array() ma problem z interpretacją wyniku takiego zapytania. Próbowałem też mysql_fetch_row() - efekt ten sam...

0

A! widzę :) Jak zliczasz, to daj COUNT(pokoje.id_pokoju) a potem GROUP BY klasy.id_klasy.

0
Adam.Pilorz napisał(a)

A! widzę :) Jak zliczasz, to daj COUNT(pokoje.id_pokoju) a potem GROUP BY klasy.id_klasy.

Tak, jak pisałem - zapytanie jest z całą pewnością poprawne w tej bazie (ctr+c/ctr+v do phpadmina i działa)...

<B>EDIT</B> Już nieistotne. Nie wiem, o co chodziło, ale problem udało mi się obejść okrężną drogą :). Mimo wszystko dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1