![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Próbuję zaadoptować na swoje potrzeby projekt sklepu internetowego z książki, ale co chwile napotykam jakieś błędy. Z tym jednak nie umiem sobie poradzić, gdy chcę przeszukać bazę danych z poziomu sklepu na ekaranie napotykam taki błąd: Odrzucone zapytanie: funkcja showItem: SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, Ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND KsiazkiAutorzy.AutorId = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id kod programu: Kod include "sklep_db_functions.php"; function search($autor, $tytul) { if(!makeDBConnection()){ return false; } if($autor == '' && $tytul == ''){ return false; } else if($autor == ''){ $where = "LOCATE('$tytul', `tytuł`) <> 0 "; } else if($tytul == ''){ $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 "; } else{ $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 AND "; $where .= "LOCATE('$tytul', `tytuł`) <> 0 "; } $query = "SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa "; $query .= "AS Wydawnictwo, Cena, Ksiazki.Id AS Id "; $query .= "FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy "; $query .= "WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND "; $query .= "KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND "; $query .= "KsiazkiAutorzy.AutorId = Autorzy.Id AND "; $query .= $where; $query .= "GROUP BY Ksiazki.Id"; z góry dziękuję za pomoc |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
a jaki błąd zapytania dostajesz?
spróbuj to zapytanie wykonać poprzez phpmyadmin. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
błąd jest tak jak pisałem
Cytat Odrzucone zapytanie: funkcja showItem: SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, Ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND KsiazkiAutorzy.AutorId = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
wklej to zapytanie do phpmyadmin i zobaczysz faktyczny błąd. Teraz nie masz informacji o tym jaki jest błąd, tylko o tym że on istnieje i że dane zapytanie nie wykonuje się poprawnie. Składniowo na pierwszy rzut oka wygląda okey, więc trzeba zobaczyć konkretniej na czym polega.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Wrzuciłem do phpmyadmin, pozmieniałem troche w zapytaniu bo nazwy kolumn w tabelach różniły się nieco od tych w zapytaniu, ostatecznie wygląda to tak
Cytat SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.'Ksiazka_Id' = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id teraz mam taki błąd Cytat #1064 - 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 ''Ksiazka_Id' = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE('d' at line 1 Zaczynam dopiero z php i myslq, czy generalnie może to być wina źle ponazywanych kolumn? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 36 Dołączył: 9.04.2003 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Nazwy kolumn bierz w apostrofy `kolumna` a nie cudzyslowia 'kolumna'.
-------------------- d(^^)b
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłem te apostrofy teraz kod wygląda tak:
Cytat SELECT GROUP_CONCAT( Autorzy.Nazwa ) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.`Ksiazka_Id` = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE( 'Adam Mickiewicz', `autorzy`.`nazwa` ) <>0 AND LOCATE( 'Pan Tadeusz', `tytul` ) <>0 GROUP BY Ksiazki.Id LIMIT 0 , 30 W phpmyadmin wszystko działa zaznacza wybraną książke, ale na stroni jest cały czas ten sam błąd, chyba że wrzuce kod razem z tym AND LOCATE... to wtedy wyświetla w tabeli wybraną pozycję |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Dodaj do tej funkcji w PHP na końcu:
I wywołaj gdzieś tą funkcję w ten sposób: i pokaż jak to zapytanie wygląda w PHP finalnie. Ten post edytował Michael2318 14.08.2014, 00:57:50 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
O takie coś chodzi? Na końcu jest ten return i var_dump
Kod function search($autor, $tytul) { if(!makeDBConnection()){ return false; } if($autor == '' && $tytul == ''){ return false; } else if($autor == ''){ $where = "LOCATE('$tytul', `tytuł`) <> 0 "; } else if($tytul == ''){ $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 "; } else{ $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 AND "; $where .= "LOCATE('$tytul', `tytuł`) <> 0 "; } $query = "SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.`Ksiazka_Id` = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND GROUP BY Ksiazki.Id"; if(!$result = mysql_query($query)){ echo("Odrzucone zapytanie: funkcja showItem: $query"); return false; } echo("<table border='1' align='center'>"); echo("<tr><td align='center' colspan='6'>Wyniki wyszukiwania</td></tr>"); echo("<tr>"); echo("<td>Tytuł</td>"); echo("<td>Autor</td>"); echo("<td>ISBN</td>"); echo("<td>Wydawnictwo</td>"); echo("<td>Cena</td>"); echo("<td>Dodaj</td>"); echo("</tr>"); while($arr = mysql_fetch_array($result)){ echo("<tr>"); echo("<td>"); echo("<a href='main.php?action=showitem&id=$arr[Id]'>$arr[Tytuł]</a>"); echo("</td>"); echo("<td>$arr[Autor]</td>"); echo("<td>$arr[ISBN]</td>"); echo("<td>$arr[Wydawnictwo]</td>"); echo("<td>$arr[Cena]</td>"); echo("<td>"); echo("<a href='main.php?action=atb&id=$arr[Id]'>Do koszyka</a>"); echo("</td>"); echo("</tr>"); } echo("</table>"); return $query; var_dump(search($autor, $tytul)); } Ale cały czas ten sam błąd |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 340 Pomógł: 46 Dołączył: 31.07.2009 Skąd: A Ostrzeżenie: (0%) ![]() ![]() |
tak to jest z gównianymi książkami.
Po pierwsze nie widzę abyś dodawał zmienna $where do $query zaraz za query zrób (chyba o to chudziło koledze powyżej): Kod die(var_dump($query)); Poza tym samo zapytanie jest cholernie nieczytelne, używasz wielkich znaków (w tym polskich) i kiepskiego łączenia tabel, już nawet zapomniałem ze tak można. w tym ostatnim LOCATE masz polski znak (tytuł), a kiedy wybierasz ta sama kolumnę w selekcie już polskiego znaku nie masz. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 5.07.2025 - 08:47 |