Skyline
20.11.2007, 11:39:34
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
20.11.2007, 11:47:38
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ć

A tak na poważnie - kod, kod, kod, kod ... i jeszcze raz kod ... czyli - wklej trochę swojego kodu tutaj ...
Cysiaczek
20.11.2007, 11:47:48
Pokaż jakiś kod (najlepiej tej metody)
Pozdrawiam.
Skyline
20.11.2007, 11:55:46
Wstawialem echo - widze jakie zapytania generuje i dla jakich nie daje wynikow. Roznia sie one miedzy soba tylko $id... Wklejam metode jako funkcje.
<?php
function getGroups($field, $id)
{
switch ($field) {
case 'sector':
$query_D = "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` = '".$id."'
AND `Sectors`.`idProduct` = `Products`.`idProducts`
order by `Departments`.`nameDepartments`";
$query_C = "SELECT
`Category`.`nameCategory`,
`Category`.`idCategory`,
`Category`.`idDepartment`
FROM `Category`,`Products`,`Sectors`
where `Category`.`idCategory` = `Products`.`idCategory`
AND `Sectors`.`idSector` = '".$id."'
AND `Sectors`.`idProduct` = `Products`.`idProducts`";
default:
break;
}
Database::setQuery($query_D);
$result_D = Database::Execute();
if($result_D)
{
try {
while(($row=Database::fetchAll($result_D,$method))!=NULL)
{
$queryArray_D[]=$row;
}
}
catch (Exception $error) {
}
}
Database::setQuery($query_C);
$result_C = Database::Execute();
if($result_C)
{
try {
while(($row=Database::fetchAll($result_C,$method))!=NULL)
{
$queryArray_C[]=$row;
}
}
catch (Exception $error) {
}
}
/**
* TUTAJ OTRZYMUJE DANE LUB ICH NIE OTRZYMUJE:
*
* print_r($queryArray_C);
*
*/
}
getGroups('sector',3); // dla tego wywolania np otrzymuje dane
getGroups('sector',11); // dla tego juz nie, chociaz zapytanie w bazie daje wyniki
?>
Sh4dow
20.11.2007, 12:18:28
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
20.11.2007, 12:20:38
Wyświetl sobie zapytanie przed jego wykonaniem i sprawdz, czy jest ono takie, jak być powinno.
Skyline
20.11.2007, 12:32:33
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
20.11.2007, 12:35:46
W takim wypadku musisz mieć popsutą klasę Driver ...
Sh4dow
20.11.2007, 15:31:03
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
20.11.2007, 16:26:42
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.