Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zagadkowe działanie skryptu - dlaczego tak sie dzieje?
Forum PHP.pl > Forum > PHP
Skyline
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
Kocurro
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ć winksmiley.jpg

A tak na poważnie - kod, kod, kod, kod ... i jeszcze raz kod ... czyli - wklej trochę swojego kodu tutaj ...
Cysiaczek
Pokaż jakiś kod (najlepiej tej metody)

Pozdrawiam.
Skyline
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. ?>
Sh4dow
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
Cysiaczek
Wyświetl sobie zapytanie przed jego wykonaniem i sprawdz, czy jest ono takie, jak być powinno.
Skyline
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.
Kocurro
W takim wypadku musisz mieć popsutą klasę Driver ...
Sh4dow
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
Skyline
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.
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.