Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: query was empty
Forum PHP.pl > Forum > Przedszkole
Ka-lolek
Witam,
mam taki skrypt:
  1. <?php
  2.  
  3. //utwórz połączenia z bazą danych
  4. $conn = mysql_connect(&#092;"localhost\", \"root\", \"root\") or die(mysql_error());
  5. $db = mysql_select_db(&#092;"MyDB\", $conn) or die(mysl_error());
  6. //polecenie sql
  7. $get_cats = &#092;"SELECT DISTINCT CATEGORY FROM MASTER_PRODUCTS ORDER BY CATEGORY\";
  8. $get_cats_res = mysql_query($sql, $conn) or die(mysql_error());
  9. //sprawdz czy są jakiekolwiek kategorie
  10. if(mysql_num_rows($get_cats_res) < 1) {
  11. $display_block = &#092;"<p>Przepraszamy, brak kategorii</p>\";
  12. } else {
  13. //jezeli nie bylo, to wyswietl odpowiedni tekst ^, a jezeli sa, to:
  14. //jezeli sa, to wyswietl je wraz z zawartoscia tych kategorii:
  15. while ($cat = mysql_fetch_array($get_cats_res))
  16. {
  17. $display_block .= &#092;"<p><strong>$cat[CATEGORY]</strong></p> <ul>\";
  18. //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  19. $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  20.  WHERE CATEGORY=$cat[CATEGORY]&#092;";
  21. $get_books_res = mysql_query($get_books, $conn) or die(mysql_error());
  22. while ( $book = mysql_fetch_array($get_books_res))
  23. {
  24. $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  25. <strong>$book[TITLE]</strong></a>
  26. <em>(by $book[AUTHOR])</em>&#092;";
  27. }
  28.  $display_block .= &#092;"</ul>\";
  29.  
  30.  }
  31. }
  32. ?>
  33. <html>
  34. <head>
  35. <title>SKLEP FIRMY XYZ: Widok według kategorii</title>
  36. </head>
  37. <body>
  38. <h1>Sklep firmy XYZ: Lista kategorii</h1>
  39. <? echo &#092;"$display_block\"; ?>
  40. </body>
  41. </html>


I pierwsze pytanie brzmi:
co jest w nim źle, ponieważ pojawia mi się błąd
Kod
query was empty

i nic więcej. Ani numeru lini , w której jest błąd - nic!:( Dlatego zwracam się z prośbą do was, bo skoro nie pisze mniej więcej miejsca gdzie mam szukać błędu, to pewnie go nie znajdę , bo jestem za mało obeznany w php:)

Drugie moje pytanie odnosi się tego, że Jabol i aleksander mowili, iz nazwy zmiennych w tablicy asocjacyjnej nalezy dawac w " lub ' .
zatem mialem tak napisane w tym fragmencie tego skryptu co powyzej (od powyzszego fragmentu rozni sie tym, ze zamiast $cat[CATEGORY] jest $cat['CATEGORY']) i ten skrypt nie działa: (zadzialal dopiero po usunieciu apostrofow dookola tych zmiennych tablicy asocjacyjnej)
  1. <?php
  2.  
  3. while ($cat = mysql_fetch_array($get_cats_res))
  4. {
  5. $display_block .= &#092;"<p><strong>$cat['CATEGORY']</strong></p> <ul>\";
  6. //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  7. $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  8.  WHERE CATEGORY=$cat['CATEGORY]'&#092;";
  9. $get_books_res = mysql_query($get_books, $conn) or die(mysql_error());
  10. while ( $book = mysql_fetch_array($get_books_res))
  11. {
  12. $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  13. <strong>$book['TITLE']</strong></a>
  14. <em>(by $book['AUTHOR'])</em>&#092;";
  15. }
  16.  $display_block .= &#092;"</ul>\";
  17.  
  18.  }
  19.  
  20. ?>



No , to by bylo na tyle. prosze o pomoc:)
Pozdrawiam
Ka-lolek
zbig13
Ad. 1 A jak myślisz gdzie może być błąd jeśli "zapytanie jest puste"? Chyba tam gdzie sformułowałeś te zapytanie. Wydaje mi się, że zamiast:
  1. <?php
  2. $get_cats_res = mysql_query($sql, $conn) or die(mysql_error());
  3. ?>

powinno być
  1. <?php
  2. $get_cats_res = mysql_query($get_cats, $conn) or die(mysql_error());
  3. ?>

bo to w zmiennej $get_cats jest przechowywane zapytanie.

Ad 2. Błąd z tablicami asocjacyjnymi wynika z tego, że używając ich w łańcuchu znaków należy ująć je jeszcze w nawiasy klarowe { }:
  1. <?php
  2.  
  3. while ($cat = mysql_fetch_array($get_cats_res))
  4. {
  5. $display_block .= &#092;"<p><strong>{$cat['CATEGORY']}</strong></p> <ul>\";
  6. //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  7. $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  8.  WHERE CATEGORY={$cat['CATEGORY']}&#092;";
  9. $get_books_res = mysql_query($get_books, $conn) or die(mysql_error());
  10. while ( $book = mysql_fetch_array($get_books_res))
  11. {
  12. $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  13. <strong>{$book['TITLE']}</strong></a>
  14. <em>(by {$book['AUTHOR']})</em>&#092;";
  15. }
  16.  $display_block .= &#092;"</ul>\";
  17.  
  18.  }
  19.  
  20. ?>

Pozdrawiam!
Ka-lolek
dzięki.
teraz niestety również pojawia mi się błąd, ale tym razem taki:

Kod
Unknown column 'Applications' in 'where clause'


skrypt wygląda tak:
  1. <?php
  2.  
  3. //utwórz połączenia z bazą danych
  4. $conn = mysql_connect(&#092;"localhost\", \"root\", \"root\") or die(mysql_error());
  5. $db = mysql_select_db(&#092;"MyDB\", $conn) or die(mysl_error());
  6. //polecenie sql
  7. $get_cats = &#092;"SELECT DISTINCT CATEGORY FROM MASTER_PRODUCTS ORDER BY CATEGORY\";
  8. $get_cats_res = mysql_query($get_cats, $conn) or die(mysql_error());
  9. //sprawdz czy są jakiekolwiek kategorie
  10. if(mysql_num_rows($get_cats_res) < 1) {
  11. $display_block = &#092;"<p>Przepraszamy, brak kategorii</p>\";
  12. } else {
  13. //jezeli nie bylo, to wyswietl odpowiedni tekst ^, a jezeli sa, to:
  14. //jezeli sa, to wyswietl je wraz z zawartoscia tych kategorii:
  15. while ($cat = mysql_fetch_array($get_cats_res))
  16. {
  17. $display_block .= &#092;"<p><strong>{$cat['CATEGORY']}</strong></p> <ul>\";
  18. //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  19. $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  20.  WHERE CATEGORY=$cat[CATEGORY]&#092;";
  21. $get_books_res = mysql_query($get_books, $conn) or die(mysql_error());
  22. while ( $book = mysql_fetch_array($get_books_res))
  23. {
  24. $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  25. <strong>$book[TITLE]</strong></a>
  26. <em>(by $book[AUTHOR])</em>&#092;";
  27. }
  28.  $display_block .= &#092;"</ul>\";
  29.  
  30.  }
  31. }
  32. ?>
  33. <html>
  34. <head>
  35. <title>SKLEP FIRMY XYZ: Widok według kategorii</title>
  36. </head>
  37. <body>
  38. <h1>Sklep firmy XYZ: Lista kategorii</h1>
  39. <? echo &#092;"$display_block\"; ?>
  40. </body>
  41. </html>
tiraeth
Proponuję zamiast mysql_error() wykorzystać poniższą funkcję:

  1. <?php
  2. function mysqlError($error, $file, $line)
  3. {
  4.  echo 'Message: '.$error.'<br />File: '.$file.'<br />Line: '.$line.'<br /><br />';
  5. }
  6. ?>


np.
  1. <?php
  2. $get_cats_res = mysql_query($get_cats, $conn) or die(mysqlError(mysql_error(), __FILE__, __LINE__));
  3. ?>

Dzięki temu będziemy wiedzieli gdzie wywali nam błąd...

Spróbuj tego zapytania:
  1. <?php
  2. $get_cats = &#092;"SELECT DISTINCT CATEGORY FROM `MASTER_PRODUCTS` ORDER BY CATEGORY\";
  3. ?>

Poza tym nie ustawiłeś trybu sortowania danych (ASC lub DESC) po ORDER BY smile.gif Powinno być ORDER BY CATEGORY ASC lub DESC
Ka-lolek
Hmmm zmieniłem
ten fragment:
  1. <?php
  2.  
  3.   while ($cat = mysql_fetch_array($get_cats_res))
  4.         {
  5.         $display_block .= &#092;"<p><strong>$cat[CATEGORY]</strong></p> <ul>\";
  6.         //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  7.         $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  8.                      WHERE CATEGORY = $cat[CATEGORY]&#092;";
  9.         $get_books_res = mysql_query($get_books, $conn)
  10.                         or die(mysqlError(mysql_error(), __FILE__, __LINE__));
  11.         while ( $book = mysql_fetch_array($get_books_res))
  12.               {
  13.               $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  14.                           <strong>$book[TITLE]</strong></a>
  15.                           <em>(by $book[AUTHOR])</em>&#092;";
  16.               }
  17.  
  18.  
  19. ?>

Na takie coś:
  1. <?php
  2.  
  3.   while ($cat = mysql_fetch_array($get_cats_res))
  4.         {
  5.         $category = $cat[CATEGORY];
  6.         $display_block .= &#092;"<p><strong>$category</strong></p> <ul>\";
  7.         //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  8.         $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  9.                      WHERE CATEGORY = '$category'&#092;";
  10.         $get_books_res = mysql_query($get_books, $conn)
  11.                         or die(mysqlError(mysql_error(), __FILE__, __LINE__));
  12.         while ( $book = mysql_fetch_array($get_books_res))
  13.               {
  14.               $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  15.                           <strong>$book[TITLE]</strong></a>
  16.                           <em>(by $book[AUTHOR])</em>&#092;";
  17.               }
  18.  
  19.  
  20. ?>

No i teraz działa. Tylko nie wiem czemu… czy nie jest dozwolone uzywanie tablic asocjacyjnych w warunkach where zapytania SQL?questionmark.gif
A może po prostu nie postawiłem potrzebnego ‘ lub „ Ew. {} przy $cat[CATEGORY]questionmark.gif? (jak widać mam z tym problem:P) proszę o odpowiedz i dzieki za dotychczasowe.

Caly skrypt wyglada teraz tak:
  1. <?php
  2.  
  3.  
  4. function mysqlError($error, $file, $line)
  5. {
  6.    echo 'Message: '.$error.'<br />File: '.$file.'<br />Line: '.$line.'<br /><br />';
  7. }
  8.  
  9.  
  10. //utwórz połączenia z bazą danych
  11. $conn = mysql_connect(&#092;"localhost\", \"root\", \"root\") or die(mysql_error());
  12. $db = mysql_select_db(&#092;"MyDB\", $conn) or die(mysl_error());
  13. //polecenie sql
  14. $get_cats = &#092;"SELECT DISTINCT CATEGORY FROM MASTER_PRODUCTS ORDER BY CATEGORY ASC\";
  15. $get_cats_res = mysql_query($get_cats, $conn) or
  16.               die(mysqlError(mysql_error(), __FILE__, __LINE__));
  17. //sprawdz czy są jakiekolwiek kategorie
  18. if(mysql_num_rows($get_cats_res) < 1) {
  19. $display_block = &#092;"<p>Przepraszamy, brak kategorii</p>\";
  20. } else {
  21. //jezeli nie bylo, to wyswietl odpowiedni tekst ^, a jezeli sa, to:
  22. //jezeli sa, to wyswietl je wraz z zawartoscia tych kategorii:
  23.   while ($cat = mysql_fetch_array($get_cats_res))
  24.         {
  25.         $category = $cat[CATEGORY];
  26.         $display_block .= &#092;"<p><strong>$category</strong></p> <ul>\";
  27.         //pobierz z bazy danych ksiazki , ktore sa z danej kategorii
  28.         $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS
  29.                      WHERE CATEGORY = '$category'&#092;";
  30.         $get_books_res = mysql_query($get_books, $conn)
  31.                         or die(mysqlError(mysql_error(), __FILE__, __LINE__));
  32.         while ( $book = mysql_fetch_array($get_books_res))
  33.               {
  34.               $display_block .= &#092;"<li><a href=\"shop_iteminfo.php?id=$id\">
  35.                           <strong>$book[TITLE]</strong></a>
  36.                           <em>(by $book[AUTHOR])</em>&#092;";
  37.               }
  38.          $display_block .= &#092;"</ul>\";
  39.   
  40.          }
  41. }
  42. ?>
  43. <html>
  44. <head>
  45. <title>SKLEP FIRMY XYZ: Widok według kategorii</title>
  46. </head>
  47. <body>
  48. <h1>Sklep firmy XYZ: Lista kategorii</h1>
  49. <? echo &#092;"$display_block\"; ?>
  50. </body>
  51. </html>

Pozdro!
zbig13
Cytat
A może po prostu nie postawiłem potrzebnego ‘ lub „ Ew. {} przy $cat[CATEGORY]questionmark.gif?

To jest możliwe. Po prostu w niektórych wypadkach zapytanie SQL źle interpretuje tablicę asocjacyjną bez znaków ' ' a tym bardziej gdy nie ująłeś jej w nawiasy klamrowe. Gdybyś zrobił tak:
  1. <?php
  2.  
  3. $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS WHERE CATEGORY = {$cat['CATEGORY']}\";
  4.  
  5. ?>

na pewno by podziałało.
Ka-lolek
no , juz zanim to napisales , to sprawdzilem, ze taka wersja dziala:
  1. <?php
  2.  
  3. $get_books = &#092;"SELECT ID, TITLE, AUTHOR FROM MASTER_PRODUCTS WHERE CATEGORY = '$cat[CATEGORY]'\";
  4.  
  5. ?>

czyli pewnie to co podales tez by dzialalo...

aby uniknac takich bledow, czy moglby mi ktos wytlumaczyc jak i kiedy sie uzywa te {}, ", ' . Albo niech poda jakis przystepna strone , ktora o tym traktuje (w jezyku polskim, poniewaz ciezko mi sie czyta teksty naukowe po angielsku:/)
zbig13
Tu nie ma zbyt wiele do tłumaczenia, a co dopiero pisać o tym teksty naukowe smile.gif Znaki apsotrofu (' ') powinno sie stosować w nazwie każdej zmiennej superglobalnej (np. $_POST['']), tablicy asocjacyjnej itp, pod warunkiem, że klucz jest tekstem a nie liczbą. Czyli np. :
  1. <?php
  2.  
  3. $tablica['klucz'] = 'wartośc'; // Klucz jest łańcuchem znaków.
  4. $tablica[0] = 'wartość'; // Klucz jest cyfrą. Tu nie stosuje się apostrofów,
  5.  
  6. ?>

A jeśli chodzi o nawiasy klamrowe { } to używa się ich wtedy, gdy dana zmienna superglobalna lub tablica występuje w łańcuchu:
  1. <?php
  2.  
  3. $string = &#092;"Jakiś tekst {$tablica['klucz']}. I kolejny tekst\"; // Tablica, klucz jest łańcuchem.
  4. $string = &#092;"Jakiś tekst {$tablica[3]}. Dalszy ciąg tekstu\"; // Tablica, klucz jest cyfrą.
  5. $string = &#092;"Jakiś tekst {$_POST['zmienna']}. itd...\"; // Zmienna superglobalna.
  6.  
  7. ?>

Natomiast jeśli przypisujesz element tablicy lub zmienną superglobalną do zwykłej zmiennej to nie używasz nawiasów klamrowych.
  1. <?php
  2.  
  3. $imie = $_POST['imie']; // Zmienna superglobalna.
  4. $kowalski = $nazwiska[4]; // Tablica, klucz jest cyfrą.
  5.  
  6. ?>

Mam nadzieję, że teraz już jest wszystko jasne smile.gif Zajrzyj jeszcze do manuala i poczytaj trochę o używaniu tablic i zmiennych superglobalnych.
Pozdrawiam!
Ka-lolek
a jkezeli wyswietlam tablice asocjacyjna to robie tak?

  1. <?php
  2.  
  3. echo &#092;"Wartosc wynosi {$tablica['wartosc']}
  4.  
  5. ?>


tak mi sie wydaje, bo wtedy chyba wystepuje w lancuchu?questionmark.gif
zbig13
tak, wszystko co jest zawarte między cudzysłowami lub apostrofami jest traktowane jako łańcuch znaków. Dlatego w tym przypadku tablicę też trzeba ująć w {}. A tak dla formalności to na końcu brakuje " i ; smile.gif
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.