Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zagadkowe działanie skryptu - dlaczego tak sie dzieje?
Skyline
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Witam

Mam dosc ciekawą sytuację z pobieraniem danych z MySQL. Mam w klasie metode ktora pobiera mi dane z tabeli. Jako argument przyjmuje $id , po którym wybiera interesujace mnie dane z tabeli.

I tak, jesli np $id = 3 lub $id = 9 otrzymuje potrzebne dane. Jesli jest to np $id = 2 lub $id = 11 to skrypt nie zwraca danych z tabeli. Gdy skopiuje to zapytanie, ktore nie daje wyniku, do mysql, to w phpmyadmin otrzymuje wynik. Gdzie moze być błąd ? Dlaczego baza danych zawsze wykonuje poprawnie zapytanie, a skrypt php tylko w niektorych przypadkach?

Byłbym wdzieczny za wszelkie sugestie.

Pozdrawiam
Go to the top of the page
+Quote Post
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Moja szklana kula mówi, że jest za stara by odpowiedzieć na to pytanie nie widząc kodu, który używasz ...

Poza tym jeśli źle działa to tymczasowo zamiast mysql_query wpisz echo lub die ... i sprawdź jakie zapytania generuje ...

Sprawdziłeś ? Już wiesz gdzie jest błąd - możesz podziękować (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

A tak na poważnie - kod, kod, kod, kod ... i jeszcze raz kod ... czyli - wklej trochę swojego kodu tutaj ...
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Pokaż jakiś kod (najlepiej tej metody)

Pozdrawiam.
Go to the top of the page
+Quote Post
Skyline
post
Post #4





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Wstawialem echo - widze jakie zapytania generuje i dla jakich nie daje wynikow. Roznia sie one miedzy soba tylko $id... Wklejam metode jako funkcje.

  1. <?php
  2. function getGroups($field, $id)
  3. {
  4. switch ($field) {
  5.  
  6. case 'sector':
  7. $query_D = "SELECT 
  8.  DISTINCT (`Departments`.`idDepartments`), 
  9.  `Departments`.`nameDepartments` as name
  10. FROM `Category` , `Products` , `Departments`, `Sectors`
  11. WHERE `Category`.`idCategory` = `Products`.`idCategory`
  12. AND `Departments`.`idDepartments` = `Category`.`idDepartment`
  13. AND `Sectors`.`idSector` = '".$id."' 
  14. AND `Sectors`.`idProduct` = `Products`.`idProducts` 
  15. order by `Departments`.`nameDepartments`";
  16.  
  17. $query_C = "SELECT 
  18. `Category`.`nameCategory`,
  19. `Category`.`idCategory`,
  20. `Category`.`idDepartment` 
  21. FROM `Category`,`Products`,`Sectors`
  22. where `Category`.`idCategory` = `Products`.`idCategory` 
  23. AND `Sectors`.`idSector` = '".$id."' 
  24. AND `Sectors`.`idProduct` = `Products`.`idProducts`";
  25.  
  26. default:
  27. break;
  28. }
  29.  
  30. Database::setQuery($query_D);
  31. $result_D = Database::Execute();
  32.  
  33. if($result_D)
  34. {
  35. try {
  36. while(($row=Database::fetchAll($result_D,$method))!=NULL)
  37. {
  38. $queryArray_D[]=$row;
  39. }
  40.  
  41. }
  42. catch (Exception $error) {
  43. trigger_error($error->getMessage(),E_USER_ERROR);
  44. }
  45. }
  46.  
  47.  
  48. Database::setQuery($query_C);
  49. $result_C = Database::Execute();
  50.  
  51. if($result_C)
  52. {
  53. try {
  54. while(($row=Database::fetchAll($result_C,$method))!=NULL)
  55. {
  56. $queryArray_C[]=$row;
  57. }
  58.  
  59. }
  60. catch (Exception $error) {
  61. trigger_error($error->getMessage(),E_USER_ERROR);
  62. }
  63. }
  64.  
  65. /**
  66.  * TUTAJ OTRZYMUJE DANE LUB ICH NIE OTRZYMUJE:
  67.  *
  68.  * print_r($queryArray_C);
  69.  * 
  70.  */
  71. }
  72.  
  73. getGroups('sector',3); // dla tego wywolania np otrzymuje dane
  74. getGroups('sector',11); // dla tego juz nie, chociaz zapytanie w bazie daje wyniki
  75. ?>
Go to the top of the page
+Quote Post
Sh4dow
post
Post #5





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Bez szklanej kuli stawiam ze nie ma rekordow w bazie danych o ID 2 i 11 lub sa bledy ze zlączeniami z innymi tabelami. I nie zabardzo bylo by to logiczne ze dla jednych ID jest a dla innych nie. Bledy w zapytaniu i tyle
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Wyświetl sobie zapytanie przed jego wykonaniem i sprawdz, czy jest ono takie, jak być powinno.
Go to the top of the page
+Quote Post
Skyline
post
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Chyba zle to wytlumaczylem. Nie ma bledow w zapytaniu.

Wstawiam sobie w funkcje, przed $query_D i $query_C "echo". Skrypt mi wyswietla zapytanie np:

dla wywolania funkcji getGroups('sector',3):

SELECT DISTINCT (`Departments`.`idDepartments`), `Departments`.`nameDepartments` as name FROM `Category` , `Products` , `Departments`, `Sectors` WHERE `Category`.`idCategory` = `Products`.`idCategory` AND `Departments`.`idDepartments` = `Category`.`idDepartment` AND `Sectors`.`idSector` = '3' AND `Sectors`.`idProduct` = `Products`.`idProducts` order by `Departments`.`nameDepartments`

SELECT `Category`.`nameCategory`, `Category`.`idCategory`, `Category`.`idDepartment` FROM `Category`,`Products`,`Sectors` where `Category`.`idCategory` = `Products`.`idCategory` AND `Sectors`.`idSector` = '3' AND `Sectors`.`idProduct` = `Products`.`idProducts`

Wklejam zapytanie do bazy danych - dostaje wyniki. Skrypt rowniez daje wyniki.

Teraz wywoluje: getGroups('sector',11);

otrzymuje zapytania:

SELECT DISTINCT (`Departments`.`idDepartments`), `Departments`.`nameDepartments` as name FROM `Category` , `Products` , `Departments`, `Sectors` WHERE `Category`.`idCategory` = `Products`.`idCategory` AND `Departments`.`idDepartments` = `Category`.`idDepartment` AND `Sectors`.`idSector` = '11' AND `Sectors`.`idProduct` = `Products`.`idProducts` order by `Departments`.`nameDepartments`

SELECT `Category`.`nameCategory`, `Category`.`idCategory`, `Category`.`idDepartment` FROM `Category`,`Products`,`Sectors` where `Category`.`idCategory` = `Products`.`idCategory` AND `Sectors`.`idSector` = '11' AND `Sectors`.`idProduct` = `Products`.`idProducts`

Wklejam zapytania do bazy danych - również otrzymuje wyniki. Skrypt natomiast nie daje wyników.
Go to the top of the page
+Quote Post
Kocurro
post
Post #8





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


W takim wypadku musisz mieć popsutą klasę Driver ...
Go to the top of the page
+Quote Post
Sh4dow
post
Post #9





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


to teraz sprawdz czy w warunkach 'WHERE' wszystkie dane sa prawidlowo wpisane i maja swoje wartosci w obu tablicach dla polaczen
`Category`.`idCategory` = `Products`.`idCategory`
`Departments`.`idDepartments` = `Category`.`idDepartment`
`Sectors`.`idProduct` = `Products`.`idProducts`
nie ma tu bledu skladni tylko blad w zapytaniu taki ze zapytanie nie spelnia warunkow bo polaczone tablice nie posiadaja dla siebie wymaganych rekordow
Go to the top of the page
+Quote Post
Skyline
post
Post #10





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Zapytania są poprawne, bo kazde sie wykonuje w bazie danych, ale nie kazde pobiera sie do tablicy w PHP. Problem był gdzieś indziej. Brakowało "break" po case. Teraz juz działa. Temat uwazam za zakonczony. Dziekuje wszystkim, ktorzy mi pomagali.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 29.09.2025 - 00:51