Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PDO] Budowa wyszukiwarki
DonJeday
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Witam,

Jestem w trackie budowy wyszukiwarki wyszukującej osoby. Mój problem polega na tym że nie wiem gdzie mam błąd, że nie zwraca mi wyników



  1. <?php
  2.  
  3.  
  4.  
  5. case 'personal':
  6. $wh = array();
  7. if (!empty($_POST['imie']))
  8.    $wh[] = "imie = '$_POST[imie]' ";  
  9.  
  10. if (!empty($_POST['nazwisko']))
  11.    $wh[] = "nazwisko = '$_POST[nazwisko]' ";  
  12.  
  13. if (!empty($_POST['miasto']))
  14.    $wh[] = "miasto = '$_POST[miasto]' ";  
  15.  
  16. if (!empty($_POST['rocznik']))
  17.    $wh[] = "rocznik = '$_POST[rocznik]' ";  
  18.  
  19. if (!empty($wh)) 
  20.    $where = implode(' and ', $wh); 
  21. else 
  22.    $where = ''; 
  23.  
  24.    
  25. $pdo = new PDO('mysql:host=localhost;dbname=h', 'b', 'f3',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  26. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  27. $query = $pdo -> prepare('SELECT * FROM users WHERE :where'); 
  28. $query -> bindValue(':where', $where, PDO::PARAM_STR);
  29. $query -> execute();
  30.  
  31. $aImie = array();
  32. while($row = $query -> fetch(PDO::FETCH_ASSOC)) {
  33.          $aImie[] = $row;
  34.      }
  35.   
  36. $query -> closeCursor();
  37.  
  38. $smarty->assign('data', $aImie);
  39. $smarty->display(search_results.tpl);
  40.  
  41. break;
  42.  
  43.  
  44.  
  45. ?>




Co jest nie tak. Dodam że w standartowych zapytaniach jest ok, ale po przeróbce na pdo już nie zwraca wynikóe, żadnych błędów itp.

Ten post edytował DonJeday 24.11.2008, 19:09:40


--------------------
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przyjrzyj się:
  1. <?php
  2. $query -> bindValue(':where', $where, PDO::PARAM_STR);
  3. ?>


Jak podstawić wiele warunków do zapytania? W tej chwili podstawiasz tablicę, a jaką składnię ma WHERE + wiele warunków? snitch.gif

PS. Poza tym, pokopały Ci się cudzysłowy.

Ten post edytował erix 24.11.2008, 18:47:39


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Cudzysłowy pokopały mi się przy usówaniu danych połączenia z bazą ^^



tzn. tak jak mam przekazać wiele tych warunków?


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jak? Tak samo, jak w instrukcjach warunkowych. PS. Google: MySQL WHERE i znajdziesz odpowiedź. smile.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Nie rozumiem, chodzi ci o warunki w zapytaniu to przecież dodaje składnie z warunkami
  1. <?php
  2. $where = implode(' and ', $wh);
  3. ?>


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Pardon, mój błąd, napisałeś ten kod podobnie do dodawania pól w warunkach, że przeoczyłem...

A próbowałeś łapać wyjątek PDOException na operacjach do bazy?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Cytat(erix @ 24.11.2008, 20:18:29 ) *
A próbowałeś łapać wyjątek PDOException na operacjach do bazy?




Nie smile.gif Nigdy tego nie potrzebowałem ^^

Jak to w ogóle użyć? Czy
  1. <?php
  2. PDOException extends RuntimeException {
  3.  
  4. }
  5. ?>


Wrzucam w try {} ? Czy przed try?

Ten post edytował DonJeday 24.11.2008, 20:27:04


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Użycie masz opisane na tej samej stronie manuala, gdzie znalazłeś ten kawałek.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No właśnie. tongue.gif

Napisałeś wcześniej:
Cytat
Co jest nie tak. Dodam że w standartowych zapytaniach jest ok, ale po przeróbce na pdo już nie zwraca wynikóe, żadnych błędów itp.

Zobacz najpierw, czy nie ma jakichś wyjątków.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #10





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Nawiązując do PDOException

Oto ci chodzi? :
  1. <?php
  2. try {
  3. $pdo = new PDO('mysql:host=localhost;dbname=e', 'e', 'f',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  4. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. $query = $pdo -> prepare('SELECT * FROM users WHERE :where');
  6. $query -> bindValue(':where', $where, PDO::PARAM_STR);
  7. $query -> execute();
  8.  
  9. $aImie = array();
  10. while($row = $query -> fetch(PDO::FETCH_ASSOC)) {
  11.            $aImie[] = $row;
  12.        }
  13.        
  14. $query -> closeCursor();
  15. }
  16.        catch(PDOException $e) {
  17.              echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  18.        }
  19. ?>


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Właśnie.

Ale w bloku catch lepiej będzie dać var_dump" title="Zobacz w manualu PHP" target="_manual z parametrem $e; więcej info dostaniesz.

A w ogóle, coś wypluwa?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #12





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Problem leży w
$where = implode(' and ', $wh);

Bez tego wyszukiwarka działa ale teraz nie mam jak łączyc warunków, jak to zastąpić?

Ten post edytował DonJeday 24.11.2008, 22:09:21


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Problem leży w
$where = implode(' and ', $wh);

Na jakiej podstawie to stwierdziłeś? Może sprawdź składnie finalnie uzyskiwanego zapytania, spróbuj je wywołać w konsoli MySQL/phpMyAdmin.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #14





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Stwierdziłem to po tym, że mój kolega też ma problem z implode w PDO. Poza tym jak usunałem tą linijkę i bardziej sformułowałem zapytanie poszło, ale bez implode ani rusz...


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Napisałem, co masz zrobić. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #16





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Zrobiłem i zapytanie w takiej formie wyszukało mnie w bazie...


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #17





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




W takiej formie, czy dokładnie takie, jakie wygenerowało PHP?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #18





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


  1. SELECT * FROM users WHERE imie = 'Łukasz' AND nazwisko = 'Czyż' AND miasto = 'Częstochowa' AND rocznik ='1991';

Normalnie wyświetliło mój rekord. A dokłądnie takie zapytanie powinno wejśc w PDO i wchodzi ale nie wyświetla wyników...

Ten post edytował DonJeday 24.11.2008, 22:34:29


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #19





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Hmm, wydaje mi się, że Twój problem dotyczy różnych systemów kodowań w bazie i na stronie. Spróbuj wyciągnąć rekordy szukając po ID, czy sytuacja się powtórzy.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DonJeday
post
Post #20





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


Napewno nie kodowanie winksmiley.jpg Cały system napisałem w PDO wszystko w UTF i nigdzie nie było problemu z selectem do momentu gdy zacząłem pisać wyszukiwarkę. BTW. pisałem że jeśli ogranicze i bardziej sformułuje zapytanie to wyszukiwanie działa. To napewno przez implode tylko nie wiem jak to zastąpić.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:31