Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z SELECT
Forum PHP.pl > Forum > Przedszkole
mysql_php
Proszę Was o pomoc z zlokalizowaniu błędu w tym SELECT. Szukałem i nie mam pojęcia co jest nie tak:

  1. <?php
  2.  
  3. $polacz = mysql_connect('localhost', 'root', 'XXXXXX');
  4. $wybierz = mysql_select_db('wypozyczalnia');
  5.  
  6. $zapytanie = "SELECT ID_wypozyczenia, ID_filmu, f_nazwa, f_nazwa_pl, ID_osoby, o_nazwisko
    , o_imie, w_data_wyp, w_data_zwr, w_data_plan, w_ilosc_dni_przeterm, w_uwagi, w_status
  7. FROM 'wypozycz', 'filmy', 'gatunek'
  8. WHERE wypozycz.ID_filmu=filmy.ID_filmu AND wypozycz.ID_osoby=osoby.ID_osoby";
  9. $wynik = mysql_query($zapytanie);
  10.  
  11. while ($row = mysql_fetch_array($wynik))
  12. {
  13. printf ("<tr><td>$row[ID_wypozyczenia]</td>
  14.  <td>$row[ID_filmu]</td>
  15.  <td>$row[f_nazwa]</td>
  16.  <td>$row[f_nazwa_pl]</td>
  17.  <td>$row[ID_osoby]</td>
  18.  <td>$row[o_nazwisko]</td>
  19.  <td>$row[w_data_wyp]</td>
  20.  <td>$row[w_data_zwr]</td>
  21.  <td>$row[w_data_plan]</td>
  22.  <td>$row[w_ilosc_dni_przeterm]</td>
  23.  <td>$row[w_uwagi]</td>
  24.  <td>$row[w_status]</td>
  25.  
  26. </tr>");
  27. }
  28. ?>


wyświetla mi taki komunikat:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\wamp\www\Najnowszy\pokaz_wypozyczenia.php on line 40
mike
Ten wątek: Najczęstsze błędy, (Zanim zapytasz, to sprawdź) pokazuje sposoby szukania błędów samemu. Korzystaj z niego.
W pierwszym poście ~TomASS pokazuje jak możesz sam sobie pomóc.

A jak bedziesz wiedział gdzie jest błąd i nie będziesz potrafił sobie z nim poradzić, to dopiero pisz na forum.
mysql_php
ok, zastosowałem funkcję mysql_error() ale nie wiele więcej mi to mówi. Wiem, że błąd jest gdzieś w SELECT. Ale nadal nie wiem gdzie, pomóżcie mi proszę bo już mi oczy wychodzą z orbit od wpatrywania się:

SELECT ID_wypozyczenia, ID_filmu, f_nazwa, f_nazwa_pl, ID_osoby, o_nazwisko, o_imie, w_data_wyp, w_data_zwr, w_data_plan, w_ilosc_dni_przeterm, w_uwagi, w_status FROM 'wypozycz', 'filmy', 'gatunek' WHERE wypozycz.ID_filmu=filmy.ID_filmu AND wypozycz.ID_osoby=osoby.ID_osoby
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''wypozycz', 'filmy', 'gatunek' WHERE wypozycz.ID_filmu=filmy.ID_f' at line 2
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\wamp\www\Najnowszy\pokaz_wypozyczenia.php on line 42
mike
Jak masz błąd w składnie zapytania to powinieneś szukać w dokumentacji MySQL'a.
Tutaj powiem Ci, że błąd Twój polega na tym, że dałeś apostrofy przy nazwach tabel.
  1. ... FROM 'wypozycz', 'filmy', 'gatunek' WHERE ...

a powinno ich tam nie być, lub powinny byc "odwrócone" apostrofy
  1. ... FROM `wypozycz`, `filmy`, `gatunek` WHERE ...
mysql_php
bardzo dziekuje! Proszę jeszcze o ostatnia pomoc, otóz teraz pojawia mi sie komunikat :

Column 'ID_filmu' in field list is ambiguous

O co tu chodzi? Kolumna ID_filmu jest dwuznaczna questionmark.gif Przecież jakoś muszę pokazac relacje.
mike
W tym fragmencie:
  1. SELECT ID_wypozyczenia, ID_filmu, f_nazwa, f_nazwa_pl ...

pole ID_filmu jest niejednoznaczne. Zwróć uwagę że masz takie pole w więcej niż w jednej tabeli, dlatego baza nie wie co ma wybrać.
Musisz określić zasób z którego będą pobierane te dane.
Na przykład:
  1. SELECT ID_wypozyczenia, wypozycz.ID_filmu, f_nazwa, f_nazwa_pl ...

lub
  1. SELECT ID_wypozyczenia, filmy.ID_filmu, f_nazwa, f_nazwa_pl ...

Zależnie od tego czego potrzebujesz.
mysql_php
no to teraz dzięki 100krotne smile.gif Poprawiłem w select - dodałem nazwy kolumn przed nazwą tabeli i wszystko gra.

Tak przy okazji mam pytanko, czy przed każdą kolumną trzeba dawać nazwę tabeli? Czy wysterczy przed tymi gdzie nie mam pewności co do jednoznacznej nazwy kolumny?
mike
Cytat(mysql_php @ 6.08.2006, 11:29 ) *
Tak przy okazji mam pytanko, czy przed każdą kolumną trzeba dawać nazwę tabeli? Czy wysterczy przed tymi gdzie nie mam pewności co do jednoznacznej nazwy kolumny?

Wszędzie nie trzeba.
Wtedy kiedy trzeba służy to skonkretyzowaniu zapytania, choć możesz tak zawsze pisać (oczywiście jak wybierasz tylko z jednej tabeli to nie ma sesnu) dla własnej wygody i czytelności.
Możesz wtedy skorzystać z aliasów dla tabel.

Na przykład:
  1. SELECT a.kolumna_1, a.kolumna_2, b.kolumna_1, b.kolumna_3
  2. FROM nazwa_tabeli_1 a, nazwa_tabeli_2 b
  3. WHERE a.kolumna_1 = b.kolumna_1;
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.